0

プログラムでテキスト ファイルを生成する場合、ファイルの末尾に ASCII EOF マーカー (10 進数値 26) を挿入する必要がありますか?

.NET プログラミング言語はこれを自動的に行いますか?

4

2 に答える 2

5

いいえ。EOF は、ファイルの読み取り時に OS の IO 関数によって生成されます。最新のシステムでは、ファイルに保存しないでください。

于 2009-06-26T00:33:04.470 に答える
2

マーカーの理由は^Z EOFもうありません (そして、長い間ありませんでした) - これは、ディレクトリ内のファイル サイズの正確な長さをサポートしていない CP/M からのホールドオーバーです - ファイル サイズは、ファイルの数に基づいていました。 128 バイト ブロックなので、128 バイト以外の境界でファイルを終了するには、EOF 文字を使用する必要がありました。

MS-DOS の初期のバージョンは CP/M の影響を強く受けていたため (Microsoft は CP/M プログラムを簡単に移植できるようにしたかったため)、この慣例は定着しました。

^Zプログラムは、適切な属性を持つテキスト ファイルを開く必要があります。これにより、規則を使用するファイルに遭遇した場合に備えて、OS や言語ランタイムが EOF を検出したときに通知されます。しかし、もう書く必要はありません。

考えられる例外の 1 つは、バイナリ ファイルがあり、その先頭にテキストを配置し^Z、次に 、データの順に配置する場合です。誰かがそれをコンソールにダンプすると、ゴミを吐き出すのではなく、何か賢いことを言うでしょう。これを行う理由はそれほど多くありませんが、それが行われることはめったにありません。

ウィキペディアから ( http://en.wikipedia.org/wiki/CP/M ):

ファイル サイズは、ディスク上のファイルが占める 128 バイト レコード (8 インチ ドライブのディスク セクターに直接対応) の数として指定されました。バイト単位の正確なファイル サイズを指定する一般的にサポートされている方法はありませんでした。ファイルの現在のサイズは、オペレーティング システムによってファイルのファイル制御ブロック (FCB) に保持されていました。多くのアプリケーション プログラム (テキスト エディタなど) は、ファイルをレコードのシーケンスとしてではなく、文字のシーケンスとして処理することを好むため、慣例により、テキスト ファイルはコントロール Z 文字 (ASCII SUB、16 進数の 1A) で終了します。したがって、テキスト ファイルの終わりを決定するには、ファイルの最後のレコードを調べて、終端のコントロール Z を特定する必要がありました。

于 2009-06-26T02:08:41.733 に答える