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中文本框中的内 ...
随机推荐
- [Mysql] 一些记录
1> 修改表的字段 alter table trade_market change reqype reqtype int(10) unsigned not null;alter table tr ...
- Python编程练习题
1 求可用被17整除的所有三位数 for num in range(99,1000): if num % 17 == 0: print num ps:下面的写法和上面的写法性能的差距,上面好吧? fo ...
- Android 实现闪屏页和右上角的倒计时跳转
效果图: 闪屏页用到了handler和CountDownTimer类,还需配置一下Activity的主题,这里是:android:theme="@android:style/Theme.No ...
- MyBatis中#,$的用法区别
#可以防止SQL注入 $用在一些特殊的SQL语句例如 order by ${...} , desc/asc PS:大部分用#,一些特殊情况用$
- android应用保活机制
android应用保活的基本原理: 都是通过双进程互拉以及设置进程的重要性,除非你root后 把自己的进程设置成系统进程. 互拉的方式有很多种 1.可以通过监听系统广播来把自己拉起来 2.可以多个ap ...
- javasrcipt中的for in 循环
function myFunction(){ var x; //声明变量x: var txt=""; //声明变量txt并赋值为空: var person={fname:&qu ...
- [maven] 常用插件解析
参考资料:http://my.oschina.net/zh119893/blog/276090 我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完 ...
- Linux cat命令的使用
cat命令主要用来查看文件内容,创建文件,文件合并,追加文件内容等功能. A:查看文件内容主要用法: 1.cat f1.txt,查看f1.txt文件的内容. 2.cat -n f1.txt,查看f ...
- js检测浏览器屏幕宽度
使用javascript脚本编写的一个能检测浏览器屏幕的宽度,当改变浏览器屏幕大小时,输出的数值也会随之改变.
- [转]JAVA虚拟机的生命周期
JAVA虚拟机体系结构 JAVA虚拟机的生命周期 一个运行时的Java虚拟机实例的天职是:负责运行一个java程序.当启动一个Java程序时,一个虚拟机实例也就诞生了.当该程序关闭退出,这个虚拟机实例 ...