4

C#(.NET Webサービス)でファイルを作成していますが、既存のファイルを上書きしたくありません。

その方法は、FileMode.CreateNewセットを使用してFileStreamを構築することのようです。実際、ファイルが存在する場合は例外をスローします。

しかし、ファイルの作成によってスローされる他の可能な例外とは対照的に、この例外をどのように認識しますか?http://msdn.microsoft.com/en-us/library/47ek66wy.aspxのドキュメントには、このケースが「IOException」としてリストされています。これは、他の原因で発生する可能性があるため、明らかにあいまいです。

ここでの答えは、IOExceptionをキャッチしてから、File.Existsを実行するだけですか?

4

4 に答える 4

5

次のように、例外からエラーコードを取得できます。

int hr = Marshal.GetHRForException( ex );

ファイルが存在する場合は、0x80070050になります。

于 2012-02-10T00:35:02.950 に答える
0

逆の方法をお勧めします。最初にFile.Existを実行してから、例外をキャッチします。そうすれば、ファイルがすでに存在しているという事実によって例外が発生しないことが確実になります。

于 2012-02-09T23:32:42.707 に答える
0

File.Existsメソッドが最もエレガントだと思います。リフレクションをいじって根本的な原因を推測することはできますが、それだけの価値はありません。InnerExceptionがより明確なものに設定されている可能性があります。nullですか?

また、Messageプロパティは、正確に何が起こったかを(英語または使用している言語で)記述している必要があります。Messageによって返される文字列に依存することもお勧めできません。

私はあなたの考えが正直であることが一番好きです。

于 2012-02-09T23:33:28.980 に答える
0

最善の方法はFile.Exists、FileStreamを作成する前にを使用することだと思います。例:

if (File.Exists(path))
{
   //Handle existing file
}
else
{
   FileStream newFile = new FileStream(path, FileMode.CreateNew);
   //Logic to do with your new file
}

IOExceptionを解析して、それが正確に「正しい」ことを確認しようとすると、IOExceptionは脆弱になります。それを行う唯一の方法は、IOExceptionのコメントまたは説明を比較することだと思います。

于 2012-02-09T23:35:20.860 に答える