2015-06-10 263 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