CE 文件读写操作
写入字符到文件中:
// TODO: 写字符到文件 // 参数: CString类型的文件名FileName;char *类型的数据内容;unsigned int类型内容长度 // 返回: 成功返回TRUE,失败返回FALSE BOOL WriteFileToFlash(CString FileName, char *ptr_Buffer,unsigned int bufferlength) { //打开文件 DWORD dwBytesWritten; HANDLE m_Handle = CreateFile( FileName, // 指定要创建或打开文件的文件名 GENERIC_WRITE | GENERIC_READ, // 指定文件的访问权限为可读可写 FILE_SHARE_READ, // 指定赋予其它进程的访问权限 NULL, // 文件访问的安全属性 OPEN_ALWAYS, // 指定创建或打开文件的方式:打开已存在文件,若文件已存在,则覆盖此文件,并清空已存在属性 FILE_ATTRIBUTE_NORMAL, // 指定文件的属性:默认属性 NULL); // 没有模板文件(CE不支持) if(m_Handle == INVALID_HANDLE_VALUE) { AfxMessageBox(_T("文件打开失败!")); return FALSE; } //文件指针指向文件末尾写入内容 SetFilePointer(m_Handle,,NULL,FILE_END); BOOL WriteFlags = WriteFile( m_Handle, // 指定文件句柄,CreateFile返回来的句柄 ptr_Buffer, // 指定将要向文件写入数据的数据缓冲区 bufferlength, // 指定将要写入文件的数据的字节数 &dwBytesWritten, // 表示实际写入文件的数据的字节数 NULL); // CE不支持的参数,设为NULL //资源释放防止内存泄露 CloseHandle(m_Handle); m_Handle = INVALID_HANDLE_VALUE; if (!WriteFlags) { AfxMessageBox(_T("文件写入失败!")); return FALSE; } return TRUE; } void Example() { CString m_FileName=_T("\\FLASH\\Test.csv"); char *TobeWriteFirst="Test string\r\n"; unsigned int bufferlength =strlen(TobeWriteFirst); WriteFileToFlash(m_FileName,TobeWriteFirst,bufferlength); }
多个char *类型字符合并写入,此处申请内存是为了将来多数据的处理,简单的操作可以直接strcat()连接字符串:
// TODO: 写入一行数据到文件 // 参数: 无 // 返回: 成功返回TRUE,失败返回FALSE BOOL WriteOneLineData() { BOOL ReturnValue=FALSE; char *c_ScanDate = "日期"; char *c_ProName = "名称"; //计算将要写入数据的长度 unsigned int bufferlength =strlen(c_ScanDate)+strlen(c_ProName); //申请一片内存用于临时存放将要写入文件的内容 char *ptr_Buffer; )) == NULL)//+1是字符串后面的'\0'结束符,strlen函数计算的长度是不算'\0'结束符的 { AfxMessageBox(_T("内存申请失败!")); return FALSE; } else { //使用申请的内存前一定要清空! memset(ptr_Buffer, , (bufferlength+)); //数据处理 strcat(ptr_Buffer, c_ScanDate); strcat(ptr_Buffer, c_ProName); //写入Flash if(WriteFileToFlash(g_FileName, ptr_Buffer,(bufferlength))) { ReturnValue=TRUE; } else { ReturnValue=FALSE; } //资源释放防止内存泄露 free(ptr_Buffer); } return ReturnValue; }
CString转cahr *
// TODO:Unicode的CString转为char*型,返回的是char* // 参数: 将要转换的CString类型数据 // 返回: 转换好的char*类型数据 char* UnicodeCStringToChar(CString FromCStr) { ,FromCStr,FromCStr.GetLength(),NULL,,NULL,NULL);//按字节计算宽字节字符的大小,FromCStr.GetLength()是按字符计算字符长度 char * pTochar = new char[len]; //以字节为单位为多字节字符数组申请空间,数组大小为按字节计算的宽字节字节大小 WideCharToMultiByte(CP_ACP,,FromCStr,FromCStr.GetLength(),pTochar,len,NULL,NULL); pTochar[len] = '\0'; //多字节字符以'\0'结束 return pTochar; } void Example() { char *c_ScanDate =""; CString m_EditScanDate=_T("Test Data"); c_ScanDate =UnicodeCStringToChar(m_EditScanDate); }
打开文件查找字符串:
// TODO:查找字符串 // 参数:CString类型数据 // 返回:找到返回TRUE,失败返回FALSE BOOL Check(CString ProSN) { BOOL ReturnValue=TRUE; // 打开文件查找字符是否存在,如果存在则返回FALSE并提示,不存在返回TRUE char *Temp_ProSN=UnicodeCStringToChar(ProSN); char ch_Temp; unsigned ; //打开文件 FILE *pFile; if((pFile=fopen("\\FLASH\\Configure","rb"))==NULL) { AfxMessageBox(_T("打开文件失败!")); return FALSE; } //读取文件并比对是否存在 while((ch_Temp=fgetc(pFile))!=EOF) { if(ch_Temp==Temp_ProSN[CompareTime]) { CompareTime++; } else { CompareTime=; } if(CompareTime>=strlen(Temp_ProSN)) { AfxMessageBox(_T("字符串已找到!")); ReturnValue=FALSE; break; } } //资源释放防止内存泄露 fclose(pFile); return ReturnValue; }
打开文件查找字符并读出所在行的数据:
// TODO:导入数据,在数据里搜索该字符串并读出所在行数据 // 参数:CString类型字符串 // 返回:成功找到数据信息返回TRUE,其它返回FALSE BOOL SearchDateToDisplay(CString ProSN) { BOOL ReturnValue=TRUE;//不出意外返回TRUE char ch_ReadByte; char *c_TobeFind=UnicodeCStringToChar(ProSN); char *ptr_OneLineData; unsigned ,iCount=,bufsize=(),chNum=; BOOL IsFindOut=FALSE; if ((ptr_OneLineData = (char *)malloc(bufsize)) == NULL) { AfxMessageBox(_T("内存申请失败!")); } memset(ptr_OneLineData, , bufsize); FILE *pFile; if((pFile=fopen("\\FLASE\\Test.csv","rb"))==NULL) { AfxMessageBox(_T("打开文件失败!")); return FALSE; } //读文件和查找字符并导出查找字符所在行所有数据=========================================== while((ch_ReadByte=fgetc(pFile))!=EOF) { if(ch_ReadByte=='\n') //读到行尾 { if(IsFindOut==TRUE) { break; } else { chNum=; memset(ptr_OneLineData, , ()); } } else //正常读字符 { if(chNum < bufsize) //防止缓冲区溢出 { ptr_OneLineData[chNum] = ch_ReadByte; chNum++; } //比对字符串 if(ch_ReadByte==c_TobeFind[CompareTime]) { CompareTime++; if(CompareTime>=strlen(c_TobeFind)) { //AfxMessageBox(_T("数据已找到!")); IsFindOut=TRUE; } } else { CompareTime=; } } } //若已从源文件取得数据则存放在ptr_OneLineData所指向的内存中 if(IsFindOut==FALSE) { ReturnValue=;//返回状态2,由用户操作 } else { CString CStrOneLineData =(CString)ptr_OneLineData; // 把数据转为CString类型进行处理 AfxMessageBox(CStrOneLineData); //通过CString分割字符串,分割点",",找到","然后计算CString位置,然后取所在位置前面值,删除再找,取值再删除…… ; divisionPoint = CStrOneLineData.Find(_T(",")); m_EditScanDate = CStrOneLineData.Left(divisionPoint); CStrOneLineData.Delete(,(divisionPoint+)); divisionPoint = CStrOneLineData.Find(_T("\n")); m_EditProName = CStrOneLineData.Left(divisionPoint); CStrOneLineData.Empty(); } //资源释放防止内存泄露 fclose(pFile); free(ptr_OneLineData); return ReturnValue; }
CE 文件读写操作的更多相关文章
- c语言文件读写操作总结
C语言文件读写操作总结 C语言文件操作 一.标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程 ...
- [转]Android - 文件读写操作 总结
转自:http://blog.csdn.net/ztp800201/article/details/7322110 Android - 文件读写操作 总结 分类: Android2012-03-05 ...
- PHP文件读写操作之文件写入代码
在PHP网站开发中,存储数据通常有两种方式,一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,相对于数据库存储,文件存储并没有什么优势,但是文件读写操作在基本的PHP开发 ...
- Java 字节流实现文件读写操作(InputStream-OutputStream)
Java 字节流实现文件读写操作(InputStream-OutputStream) 备注:字节流比字符流底层,但是效率底下. 字符流地址:http://pengyan5945.iteye.com/b ...
- Java 字符流实现文件读写操作(FileReader-FileWriter)
Java 字符流实现文件读写操作(FileReader-FileWriter) 备注:字符流效率高,但是没有字节流底层 字节流地址:http://pengyan5945.iteye.com/blog/ ...
- python(三)一个文件读写操作的小程序
我们要实现一个文件读写操作的小程序 首先我们有一个文件 我们要以"============"为界限,每一个角色分割成一个独立的txt文件,按照分割线走的话是分成 xiaoNa_1. ...
- 实现动态的XML文件读写操作
实现动态的XML文件读写操作(依然带干货) 前言 最近由于项目需求,需要读写操作XML文件,并且存储的XML文件格式会随着导入的数据不同而随时改变(当然导入的数据还是有一定约束的),这样我们要预先定义 ...
- ios 简单的plist文件读写操作(Document和NSUserDefaults)
最近遇到ios上文件读写操作的有关知识,记录下来,以便以后查阅,同时分享与大家. 一,简单介绍一下常用的plist文件. 全名是:Property List,属性列表文件,它是一种用来存储串行化后的对 ...
- java文件读写操作类
借鉴了项目以前的文件写入功能,实现了对文件读写操作的封装 仅仅需要在读写方法传入路径即可(可以是绝对或相对路径) 以后使用时,可以在此基础上改进,比如: 写操作: 1,对java GUI中文本框中的内 ...
随机推荐
- link和@import的区别
link属于XHTML标签,而@import完全是css提供的一种方式:标签和css样式的区别就不说了,他们起到的作用区别不大,一般建议用link因为简单,@import会对页面载入有影响,影响性能l ...
- 详解应对平台高并发的分布式调度框架TBSchedule
转载: 详解应对平台高并发的分布式调度框架TBSchedule
- C#日常总结1
Rows:行的集合: Columns:列的集合: Gridview:用来显示数据的表格{ //设置 AutoGenerateColumns="false":表示不允许自动产生列,列 ...
- python编程技巧2
模块化 ---- 这是我们程序员梦寐以求的,通过模块化可以避免重复的制造轮子. 同时 模块让你能够有逻辑地组织你的Python代码段. 把相关的代码分配到一个 模块里能让你的代码更好用,更易懂. 模块 ...
- 探索C++的秘密之详解extern "C",这就是为什么很多.lib被我们正确调用确总是无法解析的。
(转载,绝对的有用) lib被我们正确调用确总是无法解析.这是C++编译和C编译的区别 时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus extern "C&qu ...
- C# 字符串转义和反转义
System.Text.RegularExpressions.Regex.Unescape(s) System.Text.RegularExpressions.Regex.Escape(s)
- 51nod 1051 最大子矩阵和(dp)
题目链接:51nod 1051 最大子矩阵和 实质是把最大子段和扩展到二维.读题注意m,n... #include<cstdio> #include<cstring> #inc ...
- jQuery对input select操作小结
//遍历option和添加.移除optionfunction changeShipMethod(shipping){ var len = $("select[@name=ISHIPTYPE] ...
- Swift学习
Swift 中文教程(一)基础数据类型 基础类型 虽然Swift是一个为开发iOS和OS X app设计的全新编程语言,但是Swift的很多特性还是跟和Objective-C相似. Swift也提供了 ...
- Leetcode 58 Length of Last Word 难度:0
https://leetcode.com/problems/length-of-last-word/ int lengthOfLastWord(char* s) { int ans = 0; int ...