看起來像OpenOptions
不支持這種情況,現有文件將被截斷或覆蓋。有沒有什麼辦法可以創建並打開一個文件,如果它不存在但是否則失敗?
8
A
回答
5
從Rust 1.9.0開始,有OpenOptions::create_new
可以讓你安全地和自動地確保你正在創建一個新文件,否則你的命令將會失敗。
2
更新:正如Mathieu David在評論中指出的那樣。 exists()
from std::path::Path
可用於檢查路徑是否存在。
老答案:
在C,檢查是否文件名/路徑存在通常用做:
! access(filename, F_OK)
access
返回文件是否存在0,前提是你必須所需的權限。我做了一個本地Rust等價物的快速搜索,找不到任何東西。所以,你可能需要依靠
libc::access
這個。
4
它可能在C11中,或者直接使用底層的OS API函數。
如果您使用C11,則fopen
允許您以"wx"
模式打開文件。
否則,在Linux上,應該將O_CREAT
和O_EXCL
都傳遞給open(3)
函數。或者,在Windows上,將CREATE_NEW
傳遞給CreateFile()
函數的參數dwCreationDisposition
。
編輯:我原來錯過了一個事實,即open
功能已在C11進行了更新。
相關問題
- 1. Java - 有沒有辦法打開一個文本文件,如果它不存在,並附加到它,如果它確實存在?
- 2. 有什麼辦法可以在Android中打開.doc文件?
- 3. 有沒有什麼辦法可以在windows phone中創建pdf
- 4. 有沒有什麼辦法可以檢查一個文件,如果它正在被複制或正在使用
- 5. 有什麼辦法可以在Emacs中創建「項目文件」?
- 6. 有沒有什麼辦法可以創建一個UIVisualEffectView,它不會讓它變暗或變暗?
- 7. 有沒有什麼辦法可以用Tag Helper創建循環?
- 8. 有沒有什麼辦法可以用Sourcesafe創建配置項
- 9. 有什麼辦法可以找到爲什麼PHP ftp_get失敗?
- 10. 有沒有什麼辦法可以創建一個自由形式的實體
- 11. Bash:創建一個文件,如果它不存在,否則檢查它是否可寫
- 12. 有什麼辦法可以在CSS文件中做「如果IE」?
- 13. 什麼是可能的原因需要一個文件,但它並沒有跑
- 14. Findbugs失敗,出現「java.io.IOException:沒有文件可以打開」
- 15. 有沒有辦法來檢查某個斷言是否失敗
- 16. 有沒有什麼辦法重新創建packages.config文件?
- 17. 原子檢查一個文件是否存在並打開它
- 18. 有沒有辦法以編程方式檢查是否打開Excel文件
- 19. 有沒有什麼辦法可以讓Sublime Text 2默認打開一個特定的文件?
- 20. 有沒有一種方法可以檢查文件是否已經打開?
- 21. 有沒有可能有一個maven構建寫文件時,它失敗了?
- 22. 有沒有辦法從vim一次打開多個文件?
- 23. 有沒有什麼辦法可以通過cs文件搜索
- 24. 有沒有什麼辦法可以自動生成har文件?
- 25. 有沒有什麼辦法在已經存在的S3存儲桶中創建一個文件夾thorugh python?
- 26. 檢查程序是否打開。如果沒有,打開它
- 27. 有沒有辦法在一個存儲庫中有一個文件,但沒有在另一個存儲庫中?
- 28. Scala Netty有沒有什麼辦法可以共享一個ReplayingDecoder
- 29. 檢查一個文件是否存在,以及它是否沒有從嵌入的資源中創建它
- 30. 可可 - 有沒有辦法檢查NSURLConnection是否存在緩存?
是否有可能在這裏發生競爭條件,文件在「access」之後但在「open」之前出現? – Shepmaster
@Shepmaster是的。我相信我看到了Coverity Scan對此的警告。但是,有什麼選擇? –
爲什麼你需要使用不安全的功能?您可以使用['exists()'](https://doc.rust-lang.org/std/path/struct.Path.html#method.exists)檢查路徑是否存在,然後創建該文件「T。 –