File 的寫入和讀取

首先 … 基本的檔案寫入或讀取

data = File.open('temp.txt' , 'r').read
data #=> temp.txt content

純讀取這邊100%沒問題,但如果你這樣寫

File.open('temp.txt' , 'w').write('999') #=> 3
data = File.open('temp.txt' , 'r').read
data #=> ""

百分之百會出問題,原因在於 file lock,也就是檔案鎖,另外一個情況這樣的 code 反而會正常

File.open('temp.txt' , 'w').write('999') #=> 3
#關掉irb,再開一次irb,再輸入以下的code
data = File.open('temp.txt' , 'r').read
data #=> ""

檔案在寫入時會把檔案鎖住 ( file lock ),來源是目前的 process 也就是你目前的程式,如果操作的 file 沒有解掉 lock ( close ) 時,則會在 process 結束時自動解掉 lock,而 file 寫入時無法讀取寫入的內容,另外一方面,file 在操作的時候也應該留存原操作的物件指標,尤其在寫入時,所以正確的 code 會是這樣

file = File.open('temp.txt' , 'w')
file.write('999')
file.close
data = File.open('temp.txt' , 'r').read
data #=> "999"

這樣才是正確的,所以我有些 demo 可能會造成混淆,所以特別發一篇文來解釋這個現象就是

1個讚