2015-06-10 235 views
0

根据手册,如果在fopen()函数中选择a/a+模式,文件指针将被放置在最后。a +和fopen模式()

但是为什么我使用ftell()feof()仍然返回false?如果文件指针在末尾。

e.g:

$handle=fopen("./file.txt","w"); 
fwrite($handle,1234567890); 
fclose($handle); 
$handle=fopen("./file.txt","a+"); 
echo getc($handle); 
fclose($handle); 

我得到了1,但不应该我得到0,如果文件指针被放置在结束了吗?

+1

请向我们展示您的代码,包含您的输入,当前输出和预期输出 – Rizier123

+0

您是否试图实际将字符串写入文件而不是整数? – ChristianM

+0

是的,我有。但结果仍然相同。 – ray

回答

0

the documentation就在那里,靠近顶部:

ftell()给出了仅追加流不确定的结果(以 “A” 标志打开)。

+0

可能不是一个好主意。但是如果我选择+模式,为什么fgetc()仍然返回文件的第一个字符? a +模式将文件指针放在末尾 – ray

+0

@ray:可能是内部读取和写入游标之间的差异。我猜PHP只是让它们保持同步,但并没有用它来检测它们何时开始生命。当您以追加模式直接从POSIX打开文件时,写入光标位于结尾处_但读取光标位于start_处。 –

+0

非常感谢,先生。 – ray

2

a+手段,从一开始,到底。

这就是为什么你从流中得到一个字符。

在内部,您有两个流,STDINSTDOUT

+0

但文件指针放在最后。不会影响fread(),fgets()吗? – ray

+0

@ray:尽管PHP的抽象让你思考,但还是有不止一个文件指针。 –

+0

明白了,非常感谢! – ray

0

"a" - 只写。打开并写入文件末尾或创建一个新文件(如果文件不存在)。

"a+" - 阅读/书写。通过写入文件末尾来保留文件内容。

-3
$fileName = "file1.txt"; 
$fopen = fopen($fileName,"w"); 
echo ftell($fopen); 
//output position on 0 file1.text contain text "this is a string"; 
$fileName = "file1.txt"; 
$fopen = fopen($fileName,"a"); 
echo ftell($fopen); 
//output position on 0 file1.text contain text "this is a string"; 

什么位置?

+0

什么是不同的黑白。 –

+0

这不提供问题的答案。你可以[搜索类似的问题](// stackoverflow.com/search),或者参考页面右侧的相关和链接问题来找到答案。如果你有一个相关但不同的问题,请[提出一个新问题](// stackoverflow.com/questions/ask),并包含一个链接来帮助提供上下文。请参阅:[提问,获得答案,没有分心](// stackoverflow.com/tour) – LW001