2012-03-24 85 views
1

我希望将数据从期望的字节上升到以二进制模式打开的文件的另一个期望字节到另一个文件中。可以说,文件指针是在字节#10,现在我想读取数据从字节#11到字节#30.我知道我必须使用fread()函数,但不知道如何告诉此函数从所需的位置读取直到另一所需的位置。我是一个初学者,所以回答这个问题。我知道fread()是C函数,我想要C++等价函数来完成这项工作。学习文件处理的书籍链接或建议将非常棒!C++中的二进制文件

非常感谢您的帮助!

回答

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 

标准输入输出接口是相似的,但由于这是C++,我们更喜欢输入输出流之一。你永远不要使用I/O操作而不检查它们的返回值,而在iostream中这很容易。使用fread您必须小心正确解释返回值。

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). 
+0

我非常想说的是使用'FREAD '不检查它的返回值是一个编程错误。 – 2012-03-24 19:31:54