【问题标题】:Writing a buffer into file (stored 1585 byte instead 1580)将缓冲区写入文件(存储 1585 字节而不是 1580)
【发布时间】:2016-02-13 15:10:21
【问题描述】:

我将从我的缓冲区写入数据,定义为

char outBuff[16000];

进入文件。我已经从另一个文件加载了 1580 字节的数据。在此之后,我使用函数 WriteAllBytes 将此数据存储在新文件中。在变量 count 中,值 = 1580,但磁盘上的文件大小为 1585 字节。从那里有这个区别?

static bool WriteAllBytes( char * filename, const char * pWriteBuff, int size)
{
  FILE * pFile = fopen(filename, "w");

  ofstream fout("test.txt");

  if (!pFile)
    return false;

  int count = 0;

  for (int i = 0; i < size; i++)
  {
    if (fwrite(pWriteBuff, 1, 1, pFile) != NULL)
    {
      pWriteBuff++;
      count ++;
    }

    fout << *pWriteBuff;
  }

  if (count != size)
    return false;

  fclose(pFile);
}

【问题讨论】:

  • 显示您如何称呼WriteAllBytes。与您的问题没有直接关系:您为什么不只调用一次 fwrite(pWriteBuff, 1, size, pFile) 而不是写 size 次一个单字节?顺便说一句,看看你的代码,count ++ 周围的某处缺少一个}
  • 注意:文件已被操作系统缓冲。如果你使用std::ofstream,它们也会被对象缓冲。
  • 更新您的问题而不是评论。
  • @Michael Walz, WriteAllBytes("test3.txt",outBuff, size);我为测试按单个字节编程
  • @Sauber 不回答我的 cmets 但更新您的问题。

标签: c++ file char save buffer


【解决方案1】:
FILE * pFile = fopen(filename, "w");

应该是

FILE * pFile = fopen(filename, "wb");

当您应该以二进制模式打开时,您正在以文本模式打开文件。在 Windows 上,它会导致在每个 \n(0xA) 之前写入一个额外的 \r(0xD)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多