我在C中使用文件管理進行培訓,我看到有很多方法可以用fopen打開一個文件,使用單詞作爲a,r等等。一切都好,但是我也讀了如果到那個詞我添加b成爲一個二進制文件。這是什麼意思?與普通文件有什麼不同?C中的文件管理
C中的文件管理
回答
在文本模式下打開文件會導致C庫執行特定於文本的某些處理。例如,Windows和Unix/linux中的新行不同,但是您可以簡單地寫'\ n',因爲C正在爲您處理這種差異。
以二進制模式打開文件不會執行任何特殊處理,只會將其視爲原始字節。這裏有一個更長的解釋C FAQ
請注意,這隻在Windows上很重要; Unix/linux系統不需要(需要)區分文本和二進制模式,儘管你可以在沒有抱怨的情況下包含'b'標誌。
+1,但請注意,這是一個特定於Windows的功能。 :) – 2013-03-20 12:17:53
好點,添加這個細節來回答 – jam 2013-03-20 12:51:16
的差異進行說明here
二進制文件是一系列的1和0的。這被稱爲機器語言,因爲微處理器可以通過發送1或0的信號來解釋這種情況。這樣更緊湊,但不能被人讀取。
由於這個原因,文本文件是一個二進制信號字符串,被指定顯示爲更友好的字符,這使得語言比二進制更好。 ASCII就是這種指定的一個例子。這揭示了這件事的真相:所有文件都是最低級別的二進制文件。
但是,二進制適用於任何應用程序,不需要對我們進行文本清晰讀取low =人類=]首選二進制文件的應用程序示例是聲音文件,圖像和編譯程序。二進制優於文本的原因在於,用機器語言描述的圖像比用文本描述要更有效(反正它必須翻譯成機器語言)。
有兩種類型的文件:文本文件和二進制文件。
二進制文件有兩個功能可以將它們與文本文件區分開來:您可以立即跳轉到文件中的任何記錄,該文件以數組形式提供隨機訪問;並且您可以隨時更改文件中任何位置的記錄內容。二進制文件通常比文本文件具有更快的讀取和寫入時間,因爲記錄的二進制映像直接從內存存儲到磁盤(反之亦然)。在文本文件中,所有內容都必須來回轉換爲文本,這需要時間。
更多信息here
如果您在二進制模式打開一個普通的文件,你會得到它的所有數據,是不管你寫進去,就會出現在它。
OTOH,如果你在文本模式下打開一個常規文件,像行結尾這樣的東西可以得到特殊的處理。例如,當值爲13(CR
或'\r'
)和10(LF
或'\n'
)的字節序列可以被截斷爲只讀一個字節,10時讀取或10可以擴展爲13,然後寫入時爲10。這種處理是特定於平臺的(讀取,編譯器/操作系統特定的)。
對於文本文件,這通常是不重要的。但是,如果將文本模式應用於非文本文件,則可能會導致數據損壞。
此外,由於該特殊處理,不支持在以文本模式打開的文件中以任意偏移量讀寫字節。
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.)
- 1. C++中的文件管理
- 2. C++中的資源文件管理
- 3. 文件I/O管理C
- 4. C#管理文件備份
- 5. C文件管理錯誤
- 6. C讀取管理文件的內容
- 7. Python中的文件管理
- 8. 管理iOS5中的文件
- 9. 文件管理 - 管理java的文本文件
- 10. C#:管理多個App.config文件
- 11. 通過C#管理Excel文件
- 12. 文件管理器中的文件和文件夾不顯示在MVC中的Roxy文件管理器中?
- 13. 在Java中管理文件
- 14. 文件管理器
- 15. 管理.exe文件
- 16. 文件管理,SCM?
- 17. DotNetNuke文件管理
- 18. 文件管理iOS
- 19. 管理web.config文件
- 20. 用Rails管理.yml文件中的Rails環境變量管理
- 21. 如何管理源代碼管理中的常見源文件?
- 22. C++構建工件管理
- 23. C中的文件處理
- 24. c#中的文件處理#
- 25. c中的文件處理?
- 26. C++中的內存管理。
- 27. Angular的文件管理器
- 28. 管理iDevices上的文件
- 29. 文件管理on Rails的
- 30. 如何管理C++中的位/二進制文件?
有兩種類型的文件 - 二進制和文本。谷歌它的更多信息(當'b'沒有指定時,它被認爲是一個文本文件)(文本文件的例子是一個'.txt'文件,可以用文本編輯器編輯;二進制文件的例子是' .exe',可以啓動,但用文本編輯器打開會顯示垃圾) – 2013-03-20 11:57:33