2

denem.txtというファイルがあり、コンテンツがあります

123456789
123456789
123456789

モード'a+ b'でファイルを開くと、PHPはファイルの末尾へのポインターを配置することになっています。つまり、fgetc関数で文字を取得しようとすると、feofがtrueであるため、Falseが返されます。しかし、私が次のようなコードを使用すると

while (false !== ($char = fgetc($file))) {
    echo "$char\n";
}

1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 789を取得します。-> rewind()を使用したことがなく、ポインタがファイルの最後にある必要があるため、これは奇妙なことです。つまり、fgetcはFalseを返す必要があります。ftellはint0を返します。これは、ポインタがファイルの先頭にあることを意味します。ただし、ポインタの現在の位置を使用するfwriteを使用してファイルに何かを書き込もうとすると、ftellが私たちに嘘をつかない場合は、ファイルの先頭に書き込むことになっています。しかし、fwriteを使用すると、何が起こるかを推測すると、ファイルの最後に書き込まれ、ファイルは次のようになります。

123456789
123456789
123456789Test

これについて何か考えがありますか?

4

2 に答える 2

3

モードを理解する必要がありa+ます。

読み取りと追加(ファイルの終わりに書き込む)のためにファイルを開きます。ファイルが存在しない場合は作成されます。読み取り用の最初のファイル位置はファイルの先頭ですが、出力は常にファイルの末尾に追加されます。

最初はファイルの先頭にあるポインタが1つだけありますが、書き込み操作が試行されると、ファイルの末尾に移動されます。読み取り用にファイル内の任意の場所を使用して再配置できfseekますが、書き込み操作によってファイルの最後に戻ります。rewind

于 2011-03-11T17:35:57.113 に答える
0

a + bでファイルを開くと、何か別のことがわかりました。たとえば、コンテンツのないファイルを考えてみましょう。

$pointer = fopen("deneme.txt","a+b");
fwrite($pointer, rand(0,9));
echo fgetc($pointer);
echo ftell($pointer);
echo fgetc($pointer);

画面に常に「1」を出力します。OK、ファイルを読みたい場合は問題ありませんが、例のように巻き戻しを使用しない場合、ftellはポインタの位置が1であると言います。したがって、a +がAPPENDモードであり、ポインタを最後に配置する場合file ftellが嘘をついているのに、嘘をついていないのにfgetcが文字を返さないのはなぜですか?あなたの答えは「rewind()を使うだけ」ですが、私はこれについて本当に混乱しています!

于 2011-04-07T10:45:04.897 に答える