[英]Binary files in C++
我想將來自所需字節的數據存儲到以二進制模式打開的文件的另一個所需字節到另一個文件中。 讓我們說文件指針在#10字節,現在我想讀取從字節#11到字節#30的數據。我知道我必須使用fread()函數但不知道如何告訴該函數從所需位置讀取到另一個想要的位置。 我是初學者所以熊回答這個問題。
我知道fread()是C函數,我想要C ++等效函數來完成這項工作。 學習文件處理的書的鏈接或建議將是偉大的!
非常感謝你的幫助!
你必須尋求:
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
你必須小心正確地解釋返回值。
那么,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).
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.