我目前正在學習檔案處理,我發現一些來源以不同的方式提及某些語法。一些狀態fopen()為fopen("filename.type","mode"),而另一些則提到fopen("filepath","mode")(在這種情況下,我正在搜索如何打開基本.txt檔案)。為什么會有所不同?不是都試圖指向位于某處的同一個檔案嗎?
但是,當我嘗試fopen("filename.type","mode")使用語法打開一個公共.txt檔案時,它正在作業,而fopen("filepath","mode")語法卻給了我一個錯誤(檔案打開失敗)。情況有所不同,現在我正在處理一個.csv檔案,fopen("filepath","mode")語法有效,而另一種則無效。這是因為.csvC 編譯器本身沒有指定型別嗎?我確實承認有兩種型別的檔案,它們是.txt和.bin.
uj5u.com熱心網友回復:
第一個引數中的字串必須與檔案名完全匹配。它只是一個標簽,向檔案系統指示所請求檔案的名稱。
檔案中的術語并不完全穩定;你問的這兩個短語基本上是同一個意思。路徑術語嚴格來說更正確,并強調字串可能包含相對或絕對目錄路徑以及該目錄中的檔案名。
C 沒有任何“檔案擴展名”的概念,但它在某些平臺上用于識別檔案的“型別”。例如,Windows 使用檔案擴展名來識別(粗略地說)檔案屬于哪個應用程式。但就 C 而言,如果檔案名包含擴展名,則這是名稱的強制性部分,需要包含在內。
(從技術上講,如果您省略擴展名,作業系統可以代表您決定打開哪個檔案,但這不是現代系統的作業方式。但是例如,VMS 具有檔案版本的概念,這是可選的;如果您省略了這個檔案名的一部分,作業系統將始終打開檔案的最新版本。)
如果要打開檔案"/path/to/data.csv",那么這是一個有效的檔案路徑。如果您當前的作業目錄是,/path/to那么您可以簡單地省略該目錄,然后"data.csv"直接打開。您還可以指定一個相對路徑"./data.csv",例如簡單地使用.當前目錄的別名。
基于擴展名的檔案和檔案之間.txt并沒有真正的二分法.bin,盡管一些系統在另一個層面上區分了“文本”和“二進制”檔案。簡而言之,二進制檔案可以包含任意位元組流,而文本檔案對它們可以包含的內容有一些約定和(在某些遺留系統上)限制。如今,區別主要與行尾的規范化有關,不同的系統對于如何終止一行文本仍有不同的約定。Windows 使用 CRLF,而基于 Unix 的系統使用普通 LF。將位元組流標識為“文本”為如何處理此類差異提供了一些指導。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/456470.html
下一篇:逐行讀取檔案并匹配模式-C
