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

标签 c file newline fgets fread

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

我正在使用 fgets 来读取文件。

最佳答案

显示您的代码。

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

当然是在分配缓冲区之后使用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()缓冲区。

关于c - 如果换行符 '0A' 是文件的一部分,如何读取完整文件。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52532281/

相关文章:

c - 如何找到堆栈深度?

java - Java 中的正则表达式以零长度行开始并跨行继续

java - 使用 File#length() 两个字节太多

macos - 批量删除文件扩展名 OSX

JavaScript FileReader 海量结果

无法弄清楚为什么 getchar() 在 C 中第一次出现时选择换行符

c# - Resharper 在返回前停止换行

c - 在 C 中使用清理处理程序安全取消 pthread

c - 什么时候使用 short 而不是 int?

c++ - Dev C,math.h 问题