4.7 创建打开读写文件

2017-09-14  本文已影响0人  f675b1a02698

说明

我只能说Unicode很坑,所以我改成了ANSI编码.

效果

源码

#include

#include

//获取文件内容以16进制打印

DWORD ReadFileContent(LPSTR szFilePath){

HANDLE hFileRead;//文件句柄

LARGE_INTEGER liFileSize;//文件大小

DWORD dwReadSize;//读取的文件大小

LONGLONG liTotalRead = 0;//累加已读取的大小

BYTE lpFileDataBuffer[32];//文件数据缓存

//打开已存在的文件并读取内容

hFileRead = CreateFile(

szFilePath,//要打开的文件名

GENERIC_READ,//已读方式打开

FILE_SHARE_READ,//可共享读

NULL,//默认安全设置

OPEN_EXISTING,//只打开已经存在的文件

FILE_ATTRIBUTE_NORMAL,//常规文件属性

NULL//无模板

);

if (hFileRead == INVALID_HANDLE_VALUE){

printf("打开文件失败: %d\n", GetLastError());

}

if (!GetFileSizeEx(hFileRead, &liFileSize)){

printf("获取文件大小失败: %d\n", GetLastError());

} else{

printf("文件大小为: %d\n", liFileSize.QuadPart);

}

//循环读取并打印文件内容

while (TRUE){

DWORD i;

if (!ReadFile(

hFileRead,//文件的句柄

lpFileDataBuffer,//存储读取的文件内容

32,//一次读取的大小 32字节

&dwReadSize,//实际读取的大小

NULL//不使用overlapped

)){

printf("读取文件错误: %d\n", GetLastError());

break;

}

printf("读取了 %d 字节,文件内容是:\n", dwReadSize);

for (i = 0; i< dwReadSize; i++){

printf("0x%x ", lpFileDataBuffer[i]);

}

printf("\n");

liTotalRead += dwReadSize;//累加读取的数据大小

if (liTotalRead == liFileSize.QuadPart){

//如果累加的大小等于文件总大小

printf("读取文件结束\n");

break;

}

}

CloseHandle(hFileRead);

return 0;

}

//添加数据到文件尾

DWORD SaveDataToFile(LPSTR szFilePath, LPVOID lpData, DWORD dwDataSize){

HANDLE hFileWrite;//文件句柄

DWORD dwWriteDateSize;//成功写入的数据大小

//打开已存在的文件

hFileWrite = CreateFile(

szFilePath,//要打开的文件名

GENERIC_WRITE,//以写方式打开

0,//可共享读

NULL,//默认安全设置

OPEN_ALWAYS,//打开以存在的文件,没有则创建

FILE_ATTRIBUTE_NORMAL,//常规文件属性

NULL//无模板

);

if (hFileWrite == INVALID_HANDLE_VALUE){

printf("打开文件失败: %d\n", GetLastError());

}

//设置文件指针到文件尾

SetFilePointer(hFileWrite, 0, 0, FILE_END);

if (!WriteFile(hFileWrite, lpData, dwDataSize, &dwWriteDateSize, NULL)){

printf("写文件失败: %d\n", GetLastError());

} else{

printf("写文件成功,写入 %d 字节数据\n", dwWriteDateSize);

}

CloseHandle(hFileWrite);

return 0;

}

int main(int argc, PCHAR argv[]){

LPTSTR szFileData = TEXT("御坂网络写文件测试");

SaveDataToFile(TEXT("写文件.txt"), szFileData, lstrlen(szFileData));

ReadFileContent(TEXT("写文件.txt"));

getchar();

return 0;

}

上一篇下一篇

猜你喜欢

热点阅读