Windows API函數
1.創建或打開文件
HANDLE hFile = ::CreateFile(_T("E:\\Program\\測試文件夾\\myfile.txt"), //創建或打開的文件
GENERIC_READ| GENERIC_WRITE, //文件存取方式(GENERIC_WRITE)
FILE_SHARE_READ,//共享屬性(FILE_SHARE_WRITE/DELETE)
NULL,//安全屬性
OPEN_ALWAYS,//文件存在或不存在時采取的操作
FILE_ATTRIBUTE_NORMAL, //新文件屬性
NULL);//文件模板的句柄 //文件存在或不存在時采取的操作有:(CREATE_ALWAYS OPEN_ALWAYS (總能成功)// CREATE_NEW OPEN_EXISTING TRUNCATE_EXISTING(可能失敗)) //文件屬性有:FILE_ATTRIBUTE_(歸檔,隱藏,只讀,系統,臨時) //可以加上對文件操作方式:FILE_FLAG_(關閉后立即清除,異步讀寫文件,不使用緩存直接寫硬盤)
if (hFile == INVALID_HANDLE_VALUE) { ::MessageBox(NULL, _T("不能夠打開文件!"), _T("錯誤"), IDYES); }
2.讀寫文件+移動文件指針
CHAR wbuffer[256] = { 'a','b','c','d','e','f','g','g','h','i','j',' ', ' ',' ' ,' ',' ','0' }; DWORD wByte; ::WriteFile(hFile, wbuffer, 256, &wByte, NULL); ::SetFilePointer(hFile, //文件句柄
0, //移動距離 (移動TXT時候只是在同一行,不會換行)
NULL, //移動距離的高32位
FILE_BEGIN); //移動的模式(FILE_(BEGIN\CURRENT\END)何處開始移動) //返回值是新的文件指針位置或-1(失敗)
CHAR rbuffer[256] = {}; DWORD rByte; ::ReadFile(hFile, &rbuffer, 256, &rByte, NULL); ::SetEndOfFile(hFile);//移動文件結束標志EOF至文件指針位置 //SetFilePointer+SetEndOfFile可以用來截斷或者擴展文件 //讀寫都是從文件指針位置開始的
3.鎖定+解鎖文件(阻止其他程序讀寫)
::LockFile(hFile, //主要防止其他進程讀寫
0, //起始位置
0, 1024, //區域大小
0); ::UnlockFile(hFile,0,0,1024,0);
4.常用文件操作
DWORD fileType = ::GetFileType(hFile);//FILE_TYPE_CHAR/DISK/PIPE/UNKNOWN
DWORD fileSizeHigh; //文件長度的高字
DWORD fileSize = ::GetFileSize(hFile, &fileSizeHigh);//文件長度低字
DWORD fileAttrubutes = ::GetFileAttributes(_T("E:\\Program\\測試文件夾\\myfile.txt")); ::CopyFile(_T("E:\\Program\\測試文件夾\\myfile.txt"), //源文件
_T("E:\\Program\\測試文件夾\\Copyfile.txt"), //目標文件
FALSE); //若目標文件存在是否按出錯處理
::DeleteFile(_T("E:\\Program\\測試文件夾\\Copyfile.txt"));//只能刪除存在且非只讀文件
::MoveFile(_T("E:\\Program\\測試文件夾\\myfile.txt"), _T("E:\\Program\\測試文件夾\\測試目錄\\myfile.txt"));//(失敗)
::MoveFileEx(_T("E:\\Program\\測試文件夾\\測試目錄\\myfile.txt"), _T("E:\\Program\\測試文件夾\\myfile.txt"), MOVEFILE_REPLACE_EXISTING);//如果文件已經存在就替換 //MOVEFILE_DELAY_UNTIL_REBOOT 直到重啟再移動(若想下次啟動就刪除文件則第二個參數設置為NULL) //MOVEFILE_WRITE_THROUGH 直到原文件從磁盤刪除再返回
::CloseHandle(hFile);//使用完畢就釋放句柄
5.MFC對文件的操作(讀寫+移動指針)
//MFC CFile類
CFile file,file1; file.Open(_T("E:\\Program\\測試文件夾\\CFilemyfile.txt"), CFile::modeReadWrite | CFile::modeCreate|CFile::shareDenyWrite); //默認是獨占方式並且存在的文件長度會被截為0 (可以設置共享模式shareDenyNone等)
CFileException e; file1.Open(_T("E:\\Program\\測試文件夾\\myfile.txt"), CFile::modeRead | CFile::modeCreate|CFile::modeNoTruncate,&e); //CFile::modeNoTruncate長度不會被截為0
BYTE buffer1[4096] = { "abcdefghijklmnopqrstuvwxyz" }; file.Write(buffer1, 4096); //寫
file.Seek(0, FILE_BEGIN); //移動文件指針
BYTE buffer[4096]; UINT nBytesRead = file.Read(buffer, sizeof(buffer)); //讀,返回未讀取字節數
file.Close();