2012-03-24 117 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