簡體   English   中英

在C中讀取二進制文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM