美文网首页
4.7 创建打开读写文件

4.7 创建打开读写文件

作者: f675b1a02698 | 来源:发表于2017-09-14 16:16 被阅读0次

    说明

    我只能说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;

    }

    相关文章

      网友评论

          本文标题:4.7 创建打开读写文件

          本文链接:https://www.haomeiwen.com/subject/hpgqsxtx.html