出力ファイル名を選択するためのカスタム コントロールを作成しました。典型的なものは、ファイル名のテキスト ボックス、「参照」ボタン、およびアプリケーション固有のその他の機能です。
ファイル名によってテキストボックスの色が変わります。ファイルの場所に書き込めない場合は、赤色になります。ファイルが既に存在する場合は、黄色に変わります。それ以外の場合は、システムが割り当てた色のままです。
ファイルが存在するかどうかを確認するには、IO.File.Exists を使用します。簡単です。
「ファイルに書き込むことができる場合」を、ファイルが実際に開かれ、何かが書き込まれ、閉じられ、削除される単純な try-catch ブロックとして実装しました。いずれかの時点で例外がスローされた場合、ユーザーがそのファイル名を使用できないことがわかっているので、テキスト ボックスを赤にします。
これはキャッチオールです。やろうとしている実際の操作を行っているので、フールプルーフです。しかし、それが可能かどうかを確認するためだけに、狂ったようにファイルを作成および削除するソフトウェアを用意するのは無責任に思えます。
私の質問は、ファイルを作成せずにこの機能を複製するにはどうすればよいですか? 私がしなければならないことがわかります:
- パスの正当性を確認してください (たとえば、「z:」は有効なファイル名ではありません)。これには、パスを解析し、すべてのディレクトリが存在することを確認する必要があります。
- 場所が存在する場合は、書き込み権限を確認する必要があります。(この目的のために、いくつかの回答済みの質問が存在します。)
他に何かありますか?
編集
数分以内に、実際の書き込みが行われる前に、ファイルにアクセスできることを私がまったくチェックしていないことを批判する回答がすでに投票されていることがわかります。私の質問から「離れて」、それを達成するためのまったく異なる方法があるかどうかを確認する専門家に感謝しますが、それを行うべきではないと言うことは、私の質問に対する答えではありません。
それでは、私のアプリケーションについて詳しく説明しましょう (同時に何百人ものユーザーがいるとは思っていません)。
私はこのファイル チューザー コントロールをデータ取得アプリケーションで使用しています。多くの場合、実行しようとしているテストは何らかの形で「高価」です。したがって、非常に慎重に設定することが重要です。データの上書きは非常にコストがかかる可能性があります (恐れのあるユーザーのために、日付と時刻をミリ秒単位でファイル名に追加するチェックボックスがあります)。
したがって、インジケーターの色の目的は、ソフトウェアがファイルに書き込むことができることを確実に知る方法を提供することではありません (そのチェックは、実際に必要なときに実行されます)。少なくとも彼はファイル名を正しく設定しているので、先に進んでも古いデータを上書きしないことが保証されており、土壇場での IO エラー (ファイル名のタイプミス) によって実験が記録されずに実行されることはほぼないと確信しています。