我想将来自所需字节的数据存储到以二进制模式打开的文件的另一个所需字节到另一个文件中。让我们说文件指针在#10字节,现在我想读取从字节#11到字节#30的数据。我知道我必须使用fread()函数但不知道如何告诉该函数从所需位置读取到另一个想要的位置。我是初学者,所以熊回答这个问题。
我知道fread()是C函数,我想要C ++等效函数来完成这项工作。学习文件处理书的链接或建议将会非常棒!
非常感谢你的帮助!
答案 0 :(得分:3)
你必须寻求:
std::ifstream infile("source.bin", std::ios::binary);
infile.seekg(10, std::ios::beg); // seek to 10 bytes from the beginning
char buf[20];
if (!infile.read(buf, 20)) { /* error */ }
// now your data is in buf
stdio接口类似,但由于这是C ++,我们更喜欢iostreams接口。你必须永远不要在没有检查它们的返回值的情况下使用I / O操作,并且在iostream中这很容易。使用fread
时,您必须小心正确地解释返回值。
答案 1 :(得分:1)
嗯,fread的原型是:
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
fseek是:
int fseek ( FILE * stream, long int offset, int origin );
如果你想进入#11字节,你可以这样做:
fseek(file, 11, SEEK_SET) // this means: go 11 bytes from the start position.
或者,因为你已经在第10个字节,你可以这样做:
fseek(file, 1, SEEK_CUR) // this means: go 1 byte beyond current position.
然后,要从字节11读取字节30,您需要读取19个字节(30 - 11),所以你这样做:
fread(buffer, sizeof(char), 19, file).