好長時間了,一直想搞明白fopen() 與 CreateFile() 對文件操作的異同,沒有下決心去弄,忙忙就忘掉了,今天從網(wǎng)上找些東西,查查這個問題.
我估計fopen()的底層實現(xiàn)就是通過CreateFile(),相似的,CFile 中的open() 成員函數(shù)也是一樣通過 CreateFile實現(xiàn).下面是問專家的回答.
問題: 用fopen()函數(shù)生成一個文件和用CreateFile()函數(shù)生成一個文件,這兩個文件有什么不同?c/c++中的標準庫函數(shù)如fread() fwrite fseek() fslose()能否可用?是否有功能類似API的函數(shù)也可用?請專家賜教非常感謝!!!
答案: 使用API和標準庫函數(shù)都可以生成文本文件和二進制文件,在這點上沒有區(qū)別。同fread()對應(yīng)的是ReadFile,同fwrite()對應(yīng)的是WriteFile,同fseek()對應(yīng)的是SetFilePointer,同fclose對應(yīng)的是CloseHandle。兩套函數(shù)都可以使用,你熟悉哪個用哪個。不過API函數(shù)可以讀寫Windows的設(shè)備文件,功能更多一些。
打開文件的幾種方式的比較:
1 fopen(TEXT("test.txt"),TEXT("r")); //char
_tfopen(TEXT("test.txt"),TEXT("r")); //TCHAR (unsigned long)
CFile.open(TEXT("test.txt"),CFile::modeCreate , &ex ) //CFile::modeCreate | CFile::modeWrite ,CFileException ex;
CreateFile(TEXT("test.txt"),GENERIC_READ,0,NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
2 fopen(TEXT("test.txt"),TEXT("w")); //char
_tfopen(TEXT("test.txt"),TEXT("w")); //TCHAR (unsigned long)
CFile.open(TEXT("test.txt"),CFile::modeCreate | CFile::modeWrite|CFile::modeCreate, &ex )
CreateFile(TEXT("test.txt"),GENERIC_READ,0,NULL,
OPEN_EXISTING|,FILE_ATTRIBUTE_NORMAL,NULL);
如果文件打開成功則返回文件句柄,否則返回INVALID_HANDLE_VALUE。通過GetLastError來獲取錯誤信息,文件的關(guān)閉很簡單,只需要用CloseHandle就可以關(guān)閉文件,當文件被關(guān)閉時所有緩存內(nèi)數(shù)據(jù)都會被寫入到磁盤。