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中文本框中的内 ...
随机推荐
- 深入浅出设计模式——建造者模式(Builder Pattern)
模式动机无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮.方向盘.发送机等各种部件.而对于大多数用户而言,无须知道这些部件的装配细节,也几乎不会使用单 ...
- 从零开始HTML(一 2016/9/19)
就是准备跟着W3C上的教程过一遍HTML啦,边看边记录更便于理解记忆吧~ 1.属性 HTML 标签可以拥有属性.属性提供了有关 HTML 元素的更多的信息.属性总是以名称/值对的形式出现,比如:nam ...
- [Prodinner项目]学习分享_第三部分_Service层(业务逻辑层)
前两节讲到怎样生成一个Model和怎样将Model映射到数据库,这一节将讲到业务逻辑层,也就是Service层. 1.Prodinner架构已经构建好的,基本的增删改查. 假设,我现在想操作第二节中讲 ...
- 【Todo】【读书笔记】机器学习-周志华
书籍位置: /Users/baidu/Documents/Data/Interview/机器学习-数据挖掘/<机器学习_周志华.pdf> 一共442页.能不能这个周末先囫囵吞枣看完呢.哈哈 ...
- Linux 忘记密码解决方法
很多朋友经常会忘记Linux系统的root密码,linux系统忘记root密码的情况该怎么办呢?重新安装系统吗?当然不用!进入单用户模式更改一下root密码即可. 步骤如下: 重启linux系统 3 ...
- vue学习笔记之v-for与-repeat
今天看到一个v-repeat的例子 <body> <ul id="tags"> <li v-repeat="tags"> { ...
- (33)odoo中产品价格字段
打开product.template 和 product.product 模型发现有很多关于价格描述的字段 product.template: price list_pri ...
- android 发短信
SmsManager smsManager = SmsManager.getDefault(); List<String> divideContents = smsManager.divi ...
- csu 1809 Parenthesis
题目见此 分析,把'('当成1, ')'当成-1, 计算前缀和sum. 记交换括号左边的序号为u, 右边为v,讨论左右括号: 1.s[u] == '(' && s[v] == ')' ...
- QML的一些基础的区分
什么时候用Item什么时候用Rectangle? 什么时候用Row什么时候用RowLayout? 这2个问题经常会让人迷糊. 什么时候用Item,就是你要做一个组件,这个组件是一个复合的组件,组件有部 ...