我正在编写一个C代码,由于某种原因,我正在编写的代码只需要在不实际写入内存缓冲区的情况下读取。我可以方便地将数据写入虚拟局部变量,但是必须通过将一些变量写入内存而导致不必要的开销。
int rdsize = 0;
while (rdsize > SOME_BYTES) {
rdsize += fread (/* SOME BUFFER */, 1, SOME_BYTES - rdsize, file);
if (rdsize == -1) break;
}
总之,我想让上面的代码没有/ * SOME BUFFER * /。我怎样才能做到这一点?紧密的解决方案也受到了极大的欢迎。
答案 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;
}