2011-09-05 94 views
0

返回零我已經寫了一些文本文件使用write()函數,這樣閱讀在C++

if (write(3,buffer,1024) > 0) 
     return true; 

    return false; 

當我手動在該文件中所看到的,我發現,我把緩衝區中的文本。

但是,當我嘗試讀取同一文件中的文本這樣

if (read(3,temp,5) > 0) 
      return true; 

    return false; 

相反,我通過印刷讀返回的值。它是零。

任何人都可以解釋什麼問題是?

在此先感謝

+3

您是否重新打開/關閉文件,或者至少將其倒帶?你爲什麼使用低級的Posix函數而不是'fopen' /'fread' /'fwrite'? –

+2

如果可能,您應該向我們展示所有代碼。特別是當您打開文件時的部分。 –

+5

Small aside:模式代碼if(x)返回true;返回false;'應該被'return x;'替換。有一個'if'和布爾文字是多餘的,沒有任何意義。 –

回答

2

什麼文件是3?不要像這樣硬編碼文字數字。使用預設的符號名稱,如STDIN_FILENO,STDOUT_FILENO和STDERR_FILENO等或從open()或create()獲得的文件描述符值。

無論如何,什麼工作都取決於你如何打開它們。如果你打開一個只寫文件,你將無法閱讀,等等。如果你只寫了一個文件,你必須重置它的文件指針到開始,然後才能讀回你的內容中寫道。

因此,向我們展示一些更多的代碼(例如,如何打開文件),並且人們將能夠爲您提供幫助。我猜你忘了重置文件指針。因此請嘗試:

lseek(3, 0, SEEK_SET); 

在嘗試從文件3讀取之前。我仍然認爲文字作爲文件描述符是非常可疑的。它當然不是很便攜。

+0

thanQ ...明白了:) – user650521

+1

如果這真的回答了你的問題,那麼請接受答案(點擊答案下的V形事物 - 它應該變成綠色)。 –

+0

@ user650521你不想爲你解答新的問題,是嗎?如果這個答案有幫助,爲什麼不點擊左邊勾出的勾號? – glglgl