OpenOptions
はこのシナリオをサポートしていないと思われ、既存のファイルは切り捨てられるか上書きされます。ファイルが存在しない場合は作成して開くことができますが、それ以外の場合は失敗しますか?
8
A
答えて
5
錆1.9.0からは、OpenOptions::create_new
があります。これにより、安全に、かつ原子的に新しいファイルを作成していることを確認でき、そうでない場合はコマンドが失敗します。
2
更新:マシュー・デイビッドがコメントに指摘しているように。 から std::path::Path
を使用して、パスが存在するかどうかを確認できます。
旧回答:Cで
、ファイル名/パスが存在するかどうかをチェックするには、通常で行われます。
! access(filename, F_OK)
access
戻っ0ファイルが存在する場合は、あなたが持っていることを提供しました必要なアクセス許可ネイティブのRust同等のクイック検索を実行しましたが、何も見つかりませんでした。したがって、これには
libc::access
に依存する必要があります。
4
C11では、または低レベルのOS API関数を直接使用することができます。
C11を使用している場合、fopen
は"wx"
モードでファイルを開くことができます。
Linuxでは、とO_EXCL
の両方をopen(3)
関数に渡す必要があります。または、WindowsではCREATE_NEW
をCreateFile()
関数のdwCreationDisposition
パラメーターに渡します。
EDIT:私はもともとopen
機能がC11に更新されていたという事実を逃しました。
関連する問題
- 1. Socket.Connectが失敗した場合、そのドメインは存在しないと言うことができますか?
- 2. Djangoスーパーキーが存在しない場合は行を作成し、それ以外の場合は
- 3. IDが存在しない場合はテーブルに挿入し、それ以外の場合はスキップします
- 4. devise gemが存在する場合はput before_action:authenticate_user!それ以外の場合は除外します
- 5. ファイルが存在する場合はそれを返し、そうでない場合はfalseを返します。
- 6. PrinterWriterはファイルが存在しない場合は作成しますか?
- 7. データが存在する場合はUPDATE、それ以外の場合はSQLクエリをINSERT - 外部キーなし
- 8. xmlstarlet:それが存在しない場合は、属性を作成し、それ以外
- 9. ファイルが存在しない場合は、存在しない場合
- 10. CloudFormation:リソースが存在しない場合は作成しますが、削除しない場合は
- 11. データベースがまだ存在しない場合は作成してください
- 12. コンテンツが存在しない場合はファイルを作成します。
- 13. awkが存在しない場合はファイルをスキップします
- 14. Makefile - ディレクトリが存在しない場合に失敗する - クロスプラットフォーム
- 15. ファイルが存在しない場合にのみ作成する
- 16. ファイルが存在する場合はApacheが要求を処理します。それ以外の場合はSymfonyフロントコントローラ経由でルーティングします
- 17. fs.appendFileただし、パスが存在しない場合は失敗する*なし*
- 18. シェル:フォルダが既に存在する場合、gitクローンが存在する場合、失敗しません。
- 19. GNUスクリーン接続が存在する場合、作成しない場合は
- 20. コードにテストが存在しない場合の失敗コードカバレッジ
- 21. JavaScriptのチェック 'URL'が空白の場合は「」、それ以外の場合はハイパーリンクとして表示します
- 22. MSBuildが存在しない場合、ファイルをコピーまたは作成する
- 23. SQLiteが存在しない場合は新しいレコードを作成します
- 24. TestFlightから開くとアプリがクラッシュするが、それ以外の場合はうまく動作する
- 25. データベースファイル(.sdf)が存在しない場合は作成しますか?
- 26. Ember-data:レコードが存在しない場合は作成しますか?
- 27. PHP mysqlデータベースが存在しない場合は作成する
- 28. フォルダが存在しない場合は作成する
- 29. Python ConfigParser - ファイルが存在しない場合の作成
- 30. ディレクトリが存在しない場合は作成してください
ファイルが 'access'の後で' open'の前に存在する競合状態がここで起きる可能性はありますか? – Shepmaster
@Shepmasterはい。そして、私はこれについてCoverity Scanの警告を見たと思います。しかし、代替は何ですか? –
なぜ安全でない機能を使用する必要がありますか? ['exists()'](https://doc.rust-lang.org/std/path/struct.Path.html#method.exists)でパスが存在するかどうかを確認し、それがない場合はファイルを作成できます't。 –