fwrite()文件损坏c++

fwrite() File Corruption C++

本文关键字:损坏 c++ 文件 fwrite      更新时间:2023-10-16

我是c++的新手(从c#迁移过来),所以我不太确定这里发生了什么。我想做的是从文件中读取图像并将其写入输出文件,但每当我这样做时,文件的部分似乎已经损坏。

我已经检查了内存中的数据,它实际上是匹配的,所以我相信罪魁祸首一定是fwrite()发生了什么,尽管它总是可能只是我做错了什么。

下面是一些示例数据:http://pastebin.com/x0eZin6K

和我的代码:

// used to figure out if reading in one giant swoop has to do with corruption
int BlockSize = 0x200;
// Read the file data
unsigned char* data = new unsigned char[BlockSize];
// Create a new file
FILE* output = fopen(CStringA(outputFileName), "w+");
for (int i = 0; i < *fileSize; i += BlockSize)
{
    if (*fileSize - i > BlockSize)
    {
        ZeroMemory(data, BlockSize);
        fread(data, sizeof(unsigned char), BlockSize, file);
        // Write out the data
        fwrite(data, sizeof(unsigned char), BlockSize, output);
    }
    else
    {
        int tempSize = *fileSize - i;
        ZeroMemory(data, tempSize);
        fread(data, sizeof(unsigned char), tempSize, file);
        // Write out the data
        fwrite(data, sizeof(unsigned char), tempSize, output);
    }
}
// Close the files, we're done with them
fclose(file);
fclose(output);
delete[] data;
delete fileSize;

您是否在Windows上运行此代码?对于不需要文本翻译的文件,必须以二进制模式打开:

FILE* output = fopen(CStringA(outputFileName), "wb+");

输出文件如下所示:

07 07 07 09 09 08 0A 0C 14 0D 0C
07 07 07 09 09 08 0D 0A 0C 14 0D 0C
                  ^^

C运行库帮助您将n转换为rn

您需要通过在模式中添加"b"来打开二进制文件。

http://www.cplusplus.com/reference/clibrary/cstdio/fopen/