WinCE 文件操作(引用)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章