如果换行符'0A'是文件的一部分,则如何读取完整文件。

时间:2018-09-27 08:06:20

标签: c file newline fgets fread

我的文件没有任何换行符。 它是字节流的连续文件。 假设整个文件大小为100Kb。如果第n个Kb具有'0A',则读取的文件以此终止(用fseek检查,即使我给出n + 10个字节,它也以第n个字节停止),即使它不是实际的换行符。 我想全面阅读100Kb。怎么做?

我正在使用fgets读取文件。

1 个答案:

答案 0 :(得分:1)

显示您的代码。

您不能使用字符串函数来读取二进制数据,当然,它们将像输入字符串一样进行反应。

在分配缓冲区后,请使用fread()

典型的尝试可能是这样的:

void * load_file(const char *filename, size_t *length)
{
  FILE * const f = fopen(filename, "rb");
  if (f == NULL)
    return NULL;
  void *buf = NULL;
  if (fseek(f, 0, SEEK_END) == 0)
  {
    const long size = ftell(f);
    if (fseek(f, 0, SEEK_SET) == 0)
    {
      if ((buf = malloc(size)) != NULL)
      {
        const size_t got = fread(buf, size, 1, f);
        if (got < size)
        {
          free(buf);
          buf = NULL;
        }
        else if (length != NULL)
          *length = size;
      }
    }
  }
  fclose(f);
  return buf;
}

以上内容未经测试,但可以作为一个不错的轮廓。

当然,调用者在完成缓冲区后必须free()

相关问题