读取文件数据而不将其写入内存

时间:2016-01-29 14:14:28

标签: c file-io

我正在编写一个C代码,由于某种原因,我正在编写的代码只需要在不实际写入内存缓冲区的情况下读取。我可以方便地将数据写入虚拟局部变量,但是必须通过将一些变量写入内存而导致不必要的开销。

int rdsize = 0;
while (rdsize > SOME_BYTES) {
  rdsize += fread (/* SOME BUFFER */, 1, SOME_BYTES - rdsize, file);
  if (rdsize == -1) break;
}

总之,我想让上面的代码没有/ * SOME BUFFER * /。我怎样才能做到这一点?紧密的解决方案也受到了极大的欢迎。

2 个答案:

答案 0 :(得分:3)

您可以使用fseek跳过任意数量的字节:

#include<stdio.h>

// Inside a function:
success = fseek(file, 1, SOME_BYTES - rdsize, SEEK_CUR);

答案 1 :(得分:0)

如果你的函数的目的只是知道文件的大小,那么你可以使用这个函数:

int filesize(FILE *file ){
    int pos, size = -1;
    pos = fseek( file, 0, SEEK_CUR);         //save current position
    if( pos != -1 ){
              fseek(file, 0  , SEEK_END);    // move to end
       size = ftell(file);                   // get file size
              fseek(file, pos, SEEK_SET);    // rewind
    }
    return size;
}