2013-03-20 62 views
1

我在C中使用文件管理進行培訓,我看到有很多方法可以用fopen打開一個文件,使用單詞作爲a,r等等。一切都好,但是我也讀了如果到那個詞我添加b成爲一個二進制文件。這是什麼意思?與普通文件有什麼不同?C中的文件管理

+1

有兩種類型的文件 - 二進制和文本。谷歌它的更多信息(當'b'沒有指定時,它被認爲是一個文本文件)(文本文件的例子是一個'.txt'文件,可以用文本編輯器編輯;二進制文件的例子是' .exe',可以啓動,但用文本編輯器打開會顯示垃圾) – 2013-03-20 11:57:33

回答

7

在文本模式下打開文件會導致C庫執行特定於文本的某些處理。例如,Windows和Unix/linux中的新行不同,但是您可以簡單地寫'\ n',因爲C正在爲您處理這種差異。

以二進制模式打開文件不會執行任何特殊處理,只會將其視爲原始字節。這裏有一個更長的解釋C FAQ

請注意,這隻在Windows上很重要; Unix/linux系統不需要(需要)區分文本和二進制模式,儘管你可以在沒有抱怨的情況下包含'b'標誌。

+1

+1,但請注意,這是一個特定於Windows的功能。 :) – 2013-03-20 12:17:53

+0

好點,添加這個細節來回答 – jam 2013-03-20 12:51:16

2

的差異進行說明here

二進制文件是一系列的1和0的。這被稱爲機器語言,因爲微處理器可以通過發送1或0的信號來解釋這種情況。這樣更緊湊,但不能被人讀取。

由於這個原因,文本文件是一個二進制信號字符串,被指定顯示爲更友好的字符,這使得語言比二進制更好。 ASCII就是這種指定的一個例子。這揭示了這件事的真相:所有文件都是最低級別的二進制文件。

但是,二進制適用於任何應用程序,不需要對我們進行文本清晰讀取low =人類=]首選二進制文件的應用程序示例是聲音文件,圖像和編譯程序。二進制優於文本的原因在於,用機器語言描述的圖像比用文本描述要更有效(反正它必須翻譯成機器語言)。

2

有兩種類型的文件:文本文件和二進制文件。

二進制文件有兩個功能可以將它們與文本文件區分開來:您可以立即跳轉到文件中的任何記錄,該文件以數組形式提供隨機訪問;並且您可以隨時更改文件中任何位置的記錄內容。二進制文件通常比文本文件具有更快的讀取和寫入時間,因爲記錄的二進制映像直接從內存存儲到磁盤(反之亦然)。在文本文件中,所有內容都必須來回轉換爲文本,這需要時間。

更多信息here

3

如果您在二進制模式打開一個普通的文件,你會得到它的所有數據,是不管你寫進去,就會出現在它。

OTOH,如果你在文本模式下打開一個常規文件,像行結尾這樣的東西可以得到特殊的處理。例如,當值爲13(CR'\r')和10(LF'\n')的字節序列可以被截斷爲只讀一個字節,10時讀取或10可以擴展爲13,然後寫入時爲10。這種處理是特定於平臺的(讀取,編譯器/操作系統特定的)。

對於文本文件,這通常是不重要的。但是,如果將文本模式應用於非文本文件,則可能會導致數據損壞。

此外,由於該特殊處理,不支持在以文本模式打開的文件中以任意偏移量讀寫字節。

2

b用於處理二進制文件。但是,這對POSIX兼容操作系統沒有影響。

從FOPEN手冊頁:

The mode string can also include the letter 'b' either as a last char‐ 
    acter or as a character between the characters in any of the two-char‐ 
    acter strings described above. This is strictly for compatibility with 
    C89 and has no effect; the 'b' is ignored on all POSIX conforming sys‐ 
    tems, including Linux. (Other systems may treat text files and binary 
    files differently, and adding the 'b' may be a good idea if you do I/O 
    to a binary file and expect that your program may be ported to non-UNIX 
    environments.)