2

我有一个名为 denem.txt 的文件并且有内容

123456789
123456789
123456789

当我们以 'a+b' 模式打开文件时,PHP 应该将指针指向文件末尾,这意味着当我尝试使用 fgetc 函数获取字符时,它应该返回 False,因为 feof 为真。但是,当我使用类似的代码时

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 7 8 9 。-> 这很奇怪,因为我没有使用 rewind() 并且指针必须在文件末尾意味着 fgetc 必须返回 False。ftell 返回 int 0 表示指针位于文件的开头。但是,当我尝试使用使用指针当前位置的 fwrite 向文件写入内容时,如果 ftell 没有欺骗我们,它应该将其写入文件的开头。但是当我使用 fwrite 猜测会发生什么时,它会将其写入文件末尾,我的文件变为

123456789
123456789
123456789Test

你对此有什么想法吗?

4

2 回答 2

3

您需要了解a+模式。

它打开文件进行读取和附加(在文件末尾写入)。如果文件不存在,则创建该文件。读取的初始文件位置在文件的开头,但输出始终附加到文件的末尾

只有一个指针最初位于文件的开头,但当尝试写入操作时,它会移动到文件的末尾。您可以使用fseekrewind文件中的任何位置重新定位它以进行读取,但写入操作会将其移回文件末尾。

于 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”。好的,如果你想读取你倒带的文件没有问题,但如果我不使用倒带,例如,ftell 说指针的位置是 1。所以如果 a+ 是 APPEND 模式并将指针放在末尾文件 ftell 在说谎,如果不是在说谎,为什么 fgetc 不返回任何字符?您的回答是“只需使用 rewind()”,但我对此感到非常困惑!

于 2011-04-07T10:45:04.897 回答