[英]Reading Binary file in C
我在C中讀取二進制文件有以下問題。
我已經讀過二進制文件的前8個字節。 現在我需要從第9個字節開始讀取。 以下是代碼:
fseek(inputFile, 2*sizeof(int), SEEK_SET);
但是,當我打印存儲檢索值的數組的內容時,它仍然顯示前8個字節,這不是我需要的。
有人可以幫我解決這個問題嗎?
假設:
FILE* file = fopen(FILENAME, "rb");
char buf[8];
您可以讀取前8個字節,然后讀取接下來的8個字節:
/* Read first 8 bytes */
fread(buf, 1, 8, file);
/* Read next 8 bytes */
fread(buf, 1, 8, file);
或者使用fseek
跳過前8個字節並讀取接下來的8個字節(如果將文件中的第一個字節計為0,則包括8 ... 15):
/* Skip first 8 bytes */
fseek(file, 8, SEEK_SET);
/* Read next 8 bytes */
fread(buf, 1, 8, file);
理解這一點的關鍵是C庫函數會自動保留文件中的當前位置 。 fread
在執行讀取操作時移動它,因此下一個fread
將在前一個完成之后立即開始。 fseek
只是移動它而不閱讀。
PS:我的代碼在這里讀取問題所需的字節 。 (作為fread
的第二個參數提供的大小1)
fseek
只是移動文件流的位置指針; 一旦你移動了位置指針,你需要調用fread
來實際讀取文件中的字節。
但是,如果您已經使用fread
從文件中讀取了前八個字節,則位置指針指向第九個字節(假設沒有錯誤發生,文件長度至少為9個字節)。 當你調用fread
,它會使位置指針前進一個讀取的字節數。 您無需致電fseek
移動它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.