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中文本框中的内 ...
随机推荐
- Scrum Meeting 1-20151201
任务安排 姓名 今日任务 明日任务 困难 董元财 学习下拉刷新的实现 完成下拉刷新的实现 手机的点击动作长按和下拉有类似的地方,比较难解决 胡亚坤 学习圆形头像代码设计 完成圆形头像代码设计 无 刘猛 ...
- Linux下文件删除的原理
Linux文件删除的原理: Linux是通过link的数量来控制文件的删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除,一般来说每个文件都有2个link计数器:i_count和i_n ...
- charles抓包的使用教程
// Charles 从入门到精通:(http://blog.csdn.net/donwei8/article/details/51647752) //抓包工具:Charles-断点修改 教程 (ht ...
- FACADE
1 意图:为子系统中的一组接口提供一个一直的界面,Facade模式定义了一个高层接口.这个接口使得这一子系统更加容易使用, 2 动机,便于不需要更多功能的人通过Facade 简化使用 3 适用性: . ...
- win7 桌面上的网络邻居不见了
win7 桌面上的网络邻居不见了,可能是以前在桌面上直接删除了.现右击桌面--个性化--更改桌面图标,也找不到网上邻居了.怎么找回来啊? 网上邻居已经改名叫网络了.可以右键桌面选择“个性化”,然后更改 ...
- Laravel Container分析
在分析Laravel流程具体细节之前我们先来了解一下它的Container容器,容器的作用简单的说就是用来存储对象(类名称或者实例),包括提供一些生成对象实例的方法. 我们查看Illuminate\C ...
- selenium 安装与 chromedriver安装
直接使用pip安装 pip slenium 用 Chrome 浏览器来测试 from selenium import webdriver browser = webdriver.Chrome() ...
- 用JDBC访问MySQL
/* 在数据库中创建一个Employee的类 create table Employee( id int primary key, name varchar(20), age int); */ imp ...
- Stack的pop和push操作
#include <stack> #include <cstdio> using namespace std; int main(){ stack<int> s; ...
- 解决Ubuntu 下 vi编辑器不能使用方向键和退格键问题
转自:http://blog.csdn.net/sky101010ws/article/details/51012103 使用vi命令时,不能正常编辑文件,使用方向键时老是出现很多字母 这个问题主要是 ...