c++ - 将缓冲区写入文件(存储 1585 字节而不是 1580)

标签 c++ file char save buffer

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

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);
}

最佳答案

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

应该是

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

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

关于c++ - 将缓冲区写入文件(存储 1585 字节而不是 1580),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33668983/

相关文章:

java - 二维字符数组的格式化

c++ - 将 vector<int> 中的每个 int 添加到字符串

c++ - 深入理解strcat和strlen函数

c++ - 如何确定 QString 中的特定字符是字母还是标点符号?

c++ - 使用 Maps 和 make_pair 编译错误

c++ - GDI Sprite 显示一段时间后消失

java - 如何在 Java 中创建文件并输出到文件

C++:字符串函数

C# 通过 HTTP 上传文件

c - 合并C中的两个文件,任何文件