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);