有沒有辦法創建一個臨時文件,但沒有打開它?我必須運行一個可執行文件,將其輸出重定向到一個文件,然後讀取&解析該文件。由tempfile
創建的所有內容都已打開,並且會觸發錯誤,因爲該文件已被鎖定。創建一個臨時文件而不用在Ruby中打開它
回答
是否使用FileUtils.touch可接受的解決方案?你可以觸摸一個文件並刪除它,一旦你完成任何你想要的。
#觸摸是不是太廣泛接受的解決方案,因爲Dir :: Tmpname的顯着優勢(實際上,在大多數情況下至關重要)是確保唯一的文件名。 –
我沒有得到一個錯誤:
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
話又說回來,臨時文件似乎並不非常短暫的。
錯誤是發生在所有的程序中,還是僅僅是一個特定的程序?另外,你可以發佈導致問題的代碼,以及你得到什麼錯誤回溯?
安德魯,也許Windows對待這個不同。我收到的錯誤是'進程無法訪問該文件,因爲它正在被另一個進程使用' – Geo
我想你不會得到一個錯誤,因爲在你的情況下,當你嘗試使用再次文件。這裏的問題是,可執行文件是一個單獨的進程,它在ruby程序試圖訪問它時維護打開的文件。 –
您還可以使用迪爾:: Tmpname
Dir::Tmpname.create('your_application_prefix') { |path| puts path }
路徑將包含獨特的路徑
見https://github.com/ruby/ruby/blob/ruby_1_9_3/lib/tmpdir.rb#L116
- 1. 打開gzip文件在C中讀取而不創建臨時文件
- 2. 在Excel中創建一個將打印Word文檔而不打開它的宏。
- 3. 創建流而不是臨時文件並使用它們並丟棄它們
- 4. 無法創建一個臨時文件
- 5. 使用Sublime Text 3 cli從另一個服務中打開一個新窗口創建一個臨時文件
- 6. 如何打開一個臨時文件,並得到它的文件名?
- 7. 如何在servlet中的/ tmp中創建一個臨時文件?
- 8. 如何在內容中創建一個java.io.File實例而不在磁盤上創建臨時文件?
- 9. 創建文件時不打開/鎖定它?
- 10. 在Ruby中使用臨時文件
- 11. 在java中創建臨時文件夾
- 12. 在Linux中創建臨時文件夾
- 13. 在android中創建臨時文件
- 14. 在C++中創建臨時文件
- 15. 如何創建帶有boost文件系統的文件而不打開它
- 16. 在Windows 7上使用VB創建一個臨時文件PC
- 17. 在Php中創建一個臨時文件
- 18. 如何在IntelliJ 14中創建一個臨時文件?
- 19. 在Java中創建一個指定的臨時文件
- 20. 目標C,打開一個網站,而不打開它在Safari
- 21. Java創建臨時文件
- 22. 打開一個文件,而不知道它的類型
- 23. 在ruby中打開文件
- 24. 在java中使用utils創建臨時文件不使用:java.io.File.createTempFile()
- 25. 當我創建一個臨時文件/目錄時,它何時會被刪除?
- 26. webbrowser.open()創建一個新的文檔文件而不是打開瀏覽器
- 27. git diff不會創建臨時文件
- 28. 創建臨時文件:不能寫入
- 29. 在silverlight中調用一個aspx頁面,而不打開它
- 30. 用python創建一個臨時文件用FUSE
我猜的可執行文件是一個獨立的過程,保持了臨時文件打開(鎖定),而ruby程序正在運行。我對嗎? –
是的,索尼桑托斯。你是對的。 – Geo