WinCE 文件操作(引用)
常用的三种方法,归纳如下:
方法一 使用MFC的CFile类
打开用Open,关闭用Close(),文件指针移动用Seek,读文件用Read(),写文件用Write,获取文件属性可以使用GetFileStatus方法,这个可以查看MSDN,下面给几行简单代码:
CFile file; bool isOpenOK = file.Open(L"\\flash disk\\flyfox\\test.txt", CFile::typeBinary|CFile::modeRead);//返回真表示读成功 if (isOpenOK) { char buffer[1024]; file.Seek (10L, CFile::begin); DWORD readCount = file.Read(fileBuffer, 1024); // 返回实际读到的字节数 } file.Close ();
方法二 基于C的使用FILE结构体
1、打开文件使用_wfopen,原型如下:
FILE *_wfopen( const wchar_t *filename, const wchar_t *mode );
第二个参数是打开模式,这里有很多,比如r,w,r+等等,意义如下:
1、"r" 以只读方式打开文件,文件不存在将打开失败
2、"w" 以只写方式打开文件,如无文件生成新文件,如果文件已存在,将被破坏
3、"a" 以追加的方式打开文件,如果文件不存在,将自动创建一个新文件,已经存在的文件EOF标志将不动。
4、"r+" 以读/写方式打开文件,文件不存在将打开失败
5、"w+" 以读/写方式打开文件,如无文件生成新文件,如果文件已存在,将被破坏
6、a+ 以追加方式打开文件,如果文件不存在,将自动创建一个新文件,已经存在的文件的EOF标志将会去掉,并在写好新的数据后自动加到文件末尾。
7、t 以文本模式打开
8、b 以二进制模式打开。
这些标志可以同时使用,比如rb+(就是br+)以二进制方式,只读打开文件。
2、读文件使用fread(),原型如下:
size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
参数:
buffer是保存读取的数据,
size是每块的字节数;
n是读取的块数,如果成功,返回实际读取的块数(不是字节数),本函数一般用于二进制模式打开的文件中。
例:
char buffer[1024];
FILE *file = fopen(L"\\flash disk\\flyfox\\test.txt", "r");
fread(buffer, 2, 150 , file);//按每块2个字节,读取1590块,共读取2*150=300个字节,实际读取块数可由函数返回。
3、写文件使用fwrite()。与fread对应,原型如下:
size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );
参数意义同fread。
4、fseek()
此函数一般用于二进制模式打开的文件中,功能是定位到流中指定的位置,原型如下:
int fseek( FILE *stream, long offset, int origin );
如果成功返回0。
参数:
offset是移动的字符数,
origin是移动的基准,表示从哪开始移动文件指针,取值如下:
符号常量 | 值 | 基准位置 |
SEEK_SET | 0 | 文件开头 |
SEEK_CUR | 1 | 当前读写的位置 |
SEEK_END | 2 | 文件尾部 |
例:fseek(file, 1000L, SEEK_CUR); //把读写位置从当前位置向后移动1234字节
fseek(file, 0L, 2); //把读写位置移动到文件尾
5、关闭则是使用fclose,原型如下:
int fclose( FILE *stream );
对这种方法,也给出几行简单代码:
FILE *fp = _wfopen(pFileName, L"ab"); if (!fseek (fp, 100, SEEK_SET)) { x = fwrite(buffer, 1, 1024, fp); fflush (fp); } fclose (fp);
方法三 采用WinCE的API
1. 文件的打开CreateFile
以上参数比较多,这个在EVC下有帮助,可以查到。可以举个例子:
HANDLE hFile = CreateFile (pFileName,
GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
//打开失败
}
2. 文件的关闭
文件使用完之后就应该及时关闭,以释放对它的资源
BOOL CloseHandle(HANDLE hObject);
比如CloseHandle(hFile);
3. 文件的读写
文件的读ReadFile
文件的写WriteFile
比如:
bool b = WriteFile (hFile, pBuffer, dToWrite, pWrite, NULL);
//dToWrite为准备写入的字节数,pWrite为DWORD*,获取实际写入的字节数
if ( !b )
{
//写失败
}
4. 文件指针的移动SetFilePointer
例如:SetFilePointer(hFile, 0, NULL, FILE_BEGIN);
5. 获取和设置文件信息
参数表示文件名或者目录名
DWORD GetFileAtrribute(LPSTSTR lpFileName);
DWORD SetFileAttributes(LPCTSTR lpFileName,DWORD dwFileAttributes);
6. 获取和设置文件时间
BOOL GetFileTime
BOOL SetFileTime
7. 获取文件大小
DWORD GetFileSize(HANDLE hFile, NULL);