2016-10-21 70 views
1

考慮下面的代碼:使用File.new在Ruby中「打開」文件意味着什麼?

file = File.new('file1.txt', 'w') 
# write data to the file 
file.close 

,當你決定使用File.new方法調用打開Ruby的文件是什麼意思。我理解file = File.new,如果沒有創建,創建file1.txt,並在最開始寫入,但從操作系統的角度來看沒有任何事情發生。它只是被創建,並且可以稍後通過文本編輯器或Ruby提示進行訪問。沒有文件通過文本編輯器或任何東西打開。

隨後它必須關閉,所以我不明白如何關閉文件,當沒有真正從操作系統的角度打開。

有人可以闡明文件如何「打開」,然後「關閉」?

+0

雖然它不是特定於Ruby的,但請看看[這個存在的問題]的答案(http://stackoverflow.com/questions/33495283/what-does-opening-a-file-actually-do)是有幫助的。 – mikej

+0

我不明白。你說:「它只是被創建,並且可以在以後通過文本編輯器或通過Ruby提示進行訪問。」並且「從操作系統的角度來看,沒有任何東西可以打開」。你也可以在代碼中寫入'#將數據寫入文件'註釋,但是如何在「沒有任何東西真的被打開」時將數據寫入文件? 'File.new'確實會打開文件(必要時創建文件後),這就是爲什麼您可以寫入文件的原因。 –

+0

更具體地說,它從哪裏開放?它沒有出現在我的操作系統上(任何活動的程序,至少我可以從我的任務欄中看到,如果有幫助,使用Windows)。 – the12

回答

2

File.new方法執行IO::new(docs here)的調用。

在這種情況下被「打開」的東西是Ruby使用文件描述符跟蹤的輸入/輸出流。這些文件描述符的費用可能會很高,這就是爲什麼在FileIO的任何實例上調用close方法的最佳做法。