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中文本框中的内 ...
随机推荐
- DuiLib 自定义识别控件
遇到一个断点无法识别自定义的控件,运气比较好,一搜就搜出来了: 参考地址:http://www.bkjia.com/ASPjc/992050.html 主要是这个函数: CControlUI* CDi ...
- jQuery Easing 使用方法及其图解
jQuery Easing 使用方法及其图解,非常详尽:http://blog.sina.com.cn/s/blog_70a3539f0102v8az.html
- golang csv问题
go语言自带的有csv文件读取模块,看起来好像不错,今天玩玩,也算是系统学习go语言的一部分--^_^ 一.写csv文件 函数: func NewWriter(w io.Writer) *Writer ...
- 常用JavaBean:JdbcBean codes:Java通过JDBC 连接 Mysql 数据库
package bean;import java.sql.*;import com.mysql.jdbc.PreparedStatement;public class JdbcBean { publi ...
- CPU的高速缓存存储器知识整理
基于缓存的存储器层次结构 基于缓存的存储器层次结构行之有效,是因为较慢的存储设备比较快的存储设备更便宜,还因为程序往往展示局部性: 时间局部性:被引用过一次的存储器的位置很可能在不远的将来被再次引用. ...
- java 多线程—— 线程让步
java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...
- 0525Scrum项目7.0
一.Spring1回顾: 在这第一个冲刺中,我们主要是完成了主界面的建立,过程虽然有些曲折,大家有时候找的素材.图片都有一些冲突,但是最后我们还是求同存异,努力地做好界面! 在这一个冲刺中,我们虽然算 ...
- C#微信公众号接口开发实例-高级接口-申请带参数的二维码
最近公司涉及到微信绑定用户,做了高级接口-申请带参数的二维码,总结了下微信开发接口.微信接口开发都是除了消息用的xml 回复基本上都是用json的形式传递信息(post/get),开发的方法基本都是一 ...
- IT自学论坛
http://yun.baidu.com/share/home?uk=4113898546&view=share#category/type=0
- apache下自定义404错误页面
404页面的目的是:告诉浏览者其所请求的页面不存在或链接错误,同时引导用户使用网站其他页面而不是关闭窗口离开. 很多开源系统包括CMS系统.Blog系统等不提供404页面或提供的404页面并未达到SE ...