2011-06-22 24 views
7

有沒有辦法創建一個臨時文件,但沒有打開它?我必須運行一個可執行文件,將其輸出重定向到一個文件,然後讀取&解析該文件。由tempfile創建的所有內容都已打開,並且會觸發錯誤,因爲該文件已被鎖定。創建一個臨時文件而不用在Ruby中打開它

+0

我猜的可執行文件是一個獨立的過程,保持了臨時文件打開(鎖定),而ruby程序正在運行。我對嗎? –

+0

是的,索尼桑托斯。你是對的。 – Geo

回答

0

是否使用FileUtils.touch可接受的解決方案?你可以觸摸一個文件並刪除它,一旦你完成任何你想要的。

+1

#觸摸是不是太廣泛接受的解決方案,因爲Dir :: Tmpname的顯着優勢(實際上,在大多數情況下至關重要)是確保唯一的文件名。 –

0

您可能想要使用管道。

如果可執行文件是從您的ruby程序啓動的,請考慮使用IO.popen

如果他們是不同的進程,你可以嘗試named pipes

1

我沒有得到一個錯誤:

Andrew-Grimms-MacBook-Pro:~ agrimm$ irb 
>> require "tempfile" 
=> true 
>> tempfile = Tempfile.new("temporary_file.txt", "/tmp") 
=> #<File:/tmp/temporary_file.txt20110622-648-pkynjw-0> 
>> tempfile.close 
=> nil 
>> system("echo foo > #{tempfile.path}") 
=> true 
>> system("cat #{tempfile.path}") 
foo 
=> true 
>> tempfile.path 
=> "/tmp/temporary_file.txt20110622-648-pkynjw-0" 
>> exit 
Andrew-Grimms-MacBook-Pro:~ agrimm$ cat /tmp/temporary_file.txt20110622-648-pkynjw-0 
foo 

話又說回來,臨時文件似乎並不非常短暫的。

錯誤是發生在所有的程序中,還是僅僅是一個特定的程序?另外,你可以發佈導致問題的代碼,以及你得到什麼錯誤回溯?

+0

安德魯,也許Windows對待這個不同。我收到的錯誤是'進程無法訪問該文件,因爲它正在被另一個進程使用' – Geo

+0

我想你不會得到一個錯誤,因爲在你的情況下,當你嘗試使用再次文件。這裏的問題是,可執行文件是一個單獨的進程,它在ruby程序試圖訪問它時維護打開的文件。 –

相關問題