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中文本框中的内 ...
随机推荐
- 《BI项目笔记》报到信息分析Cube
数据源设置:数据处理逻辑: --处理丢失外键关系数据 SELECT * FROM T_ReportLeafGrade WHERE FSubFID NOT IN ( SELECT FID FROM T_ ...
- [hdu1394]Minimum Inversion Number(树状数组)
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- JAVA 列表排序
以前都通过Comparator进行排序,今天看到个例子,通过apache-common工具包进行排序,实现例子参考下面界面 http://blog.csdn.net/lizeyang/article/ ...
- TCP/IP协议学习(二) LWIP用户自定义配置文件解析
LWIP协议支持用户配置,可以通过用户裁剪实现最优化配置,LWIP默认包含opts.h作为系统默认配置,不过通过添加lwipopts.h文件并包含在opts.h头文件之前就可以对lwip进行用户裁剪, ...
- String和StringBuffer、StringBuilder的区别
目录: 1.String类的不可变性 2.用String的时候需要注意什么 3.String与StringBuilder的区别 4.StringBuilder和StringBuffer的区别 Stri ...
- 常用sql语句总结
一.连接数据库 mysql -h127.0.0.1(连接地址) -P3303(端口号) -uroot(用户名) -p123456(密码) 二.常用语句 show datebases; 查看数据库 cr ...
- [ubuntu14.04 amd64 ]搜狗拼音輸入法安裝
这个网址下载之后,双击下载的deb文件http://mirrors.sohu.com/deepin/pool/non-free/f/fcitx-sogoupinyin-release/ 就会在ubun ...
- idea首次提交项目
http://www.cnblogs.com/exmyth/p/6133289.html
- MYSQL常见错误及其解决方式
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- MultiDex到底有多坑
google为什么要引入MultiDex? dex指令是用16位寄存器来保存dex中的方法数,所以限制了在apk 中最大的方法数为65535,当超过这个最大值在编译的时候会报 方法数超标的错误. 如何 ...