說明
我只能說Unicode很坑,所以我改成了ANSI編碼.
效果
源碼
#include
#include
//獲取文件內(nèi)容以16進(jìn)制打印
DWORD ReadFileContent(LPSTR szFilePath){
HANDLE hFileRead;//文件句柄
LARGE_INTEGER liFileSize;//文件大小
DWORD dwReadSize;//讀取的文件大小
LONGLONG liTotalRead = 0;//累加已讀取的大小
BYTE lpFileDataBuffer[32];//文件數(shù)據(jù)緩存
//打開已存在的文件并讀取內(nèi)容
hFileRead = CreateFile(
szFilePath,//要打開的文件名
GENERIC_READ,//已讀方式打開
FILE_SHARE_READ,//可共享讀
NULL,//默認(rèn)安全設(shè)置
OPEN_EXISTING,//只打開已經(jīng)存在的文件
FILE_ATTRIBUTE_NORMAL,//常規(guī)文件屬性
NULL//無模板
);
if (hFileRead == INVALID_HANDLE_VALUE){
printf("打開文件失敗: %d\n", GetLastError());
}
if (!GetFileSizeEx(hFileRead, &liFileSize)){
printf("獲取文件大小失敗: %d\n", GetLastError());
} else{
printf("文件大小為: %d\n", liFileSize.QuadPart);
}
//循環(huán)讀取并打印文件內(nèi)容
while (TRUE){
DWORD i;
if (!ReadFile(
hFileRead,//文件的句柄
lpFileDataBuffer,//存儲讀取的文件內(nèi)容
32,//一次讀取的大小 32字節(jié)
&dwReadSize,//實際讀取的大小
NULL//不使用overlapped
)){
printf("讀取文件錯誤: %d\n", GetLastError());
break;
}
printf("讀取了 %d 字節(jié),文件內(nèi)容是:\n", dwReadSize);
for (i = 0; i< dwReadSize; i++){
printf("0x%x ", lpFileDataBuffer[i]);
}
printf("\n");
liTotalRead += dwReadSize;//累加讀取的數(shù)據(jù)大小
if (liTotalRead == liFileSize.QuadPart){
//如果累加的大小等于文件總大小
printf("讀取文件結(jié)束\n");
break;
}
}
CloseHandle(hFileRead);
return 0;
}
//添加數(shù)據(jù)到文件尾
DWORD SaveDataToFile(LPSTR szFilePath, LPVOID lpData, DWORD dwDataSize){
HANDLE hFileWrite;//文件句柄
DWORD dwWriteDateSize;//成功寫入的數(shù)據(jù)大小
//打開已存在的文件
hFileWrite = CreateFile(
szFilePath,//要打開的文件名
GENERIC_WRITE,//以寫方式打開
0,//可共享讀
NULL,//默認(rèn)安全設(shè)置
OPEN_ALWAYS,//打開以存在的文件,沒有則創(chuàng)建
FILE_ATTRIBUTE_NORMAL,//常規(guī)文件屬性
NULL//無模板
);
if (hFileWrite == INVALID_HANDLE_VALUE){
printf("打開文件失敗: %d\n", GetLastError());
}
//設(shè)置文件指針到文件尾
SetFilePointer(hFileWrite, 0, 0, FILE_END);
if (!WriteFile(hFileWrite, lpData, dwDataSize, &dwWriteDateSize, NULL)){
printf("寫文件失敗: %d\n", GetLastError());
} else{
printf("寫文件成功,寫入 %d 字節(jié)數(shù)據(jù)\n", dwWriteDateSize);
}
CloseHandle(hFileWrite);
return 0;
}
int main(int argc, PCHAR argv[]){
LPTSTR szFileData = TEXT("御坂網(wǎng)絡(luò)寫文件測試");
SaveDataToFile(TEXT("寫文件.txt"), szFileData, lstrlen(szFileData));
ReadFileContent(TEXT("寫文件.txt"));
getchar();
return 0;
}