2012-02-01 23 views
5

閱讀文件時,我知道提供的最後一個字符是EOF。現在,當該文件中有一個EOF字符時會發生什麼?如何區分EOF字符和文件的實際結尾?

如何區分文件的「真實」結尾和EOF字符?

+0

你*不能*在文件中有一個「EOF字符」。有沒有這樣的東西 – 2012-02-01 05:19:57

+0

在DOS中,仍然可以在Windows中。 Ctrl-Z或ASCII值26.一個這樣的仍然生成帶有EOF字符的文件的應用程序是來自The Analytical Group的名爲WinQuery的產品。 – STLDeveloper 2014-03-07 06:45:29

回答

10

我決定將我的意見轉到答案。

不能在您的文件中有一個「EOF字符」,因爲沒有這樣的事情。底層文件系統知道文件中有多少個字節;它不依賴於文件的內容來知道結尾在哪裏。

您正在使用的C函數返回EOF(-1)但未從文件中讀取。這只是功能告訴你你已經到達最後的方式。而且因爲-1在任何字符集中都不是有效的字符,所以沒有混淆。

1

假設你在談論C,EOF是-1,這不是一個字符(因此沒有混淆)。

+0

所以,當我把一個'EOF'字符放在一個文件中時,它不會註冊爲文件結尾? – polemon 2012-02-01 05:20:02

+2

「char」是一個字節(8位值),而EOF是一個整數。沒有EOF字符這樣的東西,因此你不能把它放在一個文件中。 – jdigital 2012-02-01 05:24:27

4

這個問題需要一些背景知識。在Windows上,有一個真實的「EOF字符」的過時DOS概念 - Ctrl-Z。實際上不可能從一個「假」的人那裏說出一個「真正的」人;嵌入Ctrl-Z的文件將包含一些程序角度的尾部隱藏數據,該程序實際上正在查找Ctrl-Z作爲文件結尾字符。不要試圖再寫這種代碼 - 這是沒有必要的。

在便攜式C API和UNIX上,32位的-1用於指示文件結尾,它不能是有效的8位或16位字符,因此很容易區分這種差異。

+0

嗯,好吧,看來我混淆了'EOF'和'EOT',我認爲它們基本上是一回事。 Ctrl + D通常被稱爲「文件結尾」。 – polemon 2012-02-01 06:45:57

相關問題