2

ファイルを操作するには、ファイルを tmp の場所にコピーする必要があります。いつでもファイルをコピーできるようにする必要があります。

  • 次のコードは正しいですか?
  • が既に存在する場所にコピーしようとしないことを保証しますか?
  • 失敗する可能性はありますか?(例外をキャッチする必要がありますか)

私が使用しているコードは次のとおりです。

string tmpFile = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());

前もって感謝します。

4

3 に答える 3

3

おそらくPath.GetTempFileName代わりに使用しますか?

string tmpFile = Path.GetTempFileName();

そのメソッドはスローする可能性があるIOExceptionため、おそらくある時点でそれをキャッチする必要があります。正確には、このコードが存在するコンテキストに依存します。

このメソッドはディスク上にもファイルを作成するため、この呼び出しからコードによってファイルが書き込まれるまでの間に、他のプロセスが同じ名前のファイルを作成するリスクはありません。

于 2011-10-26T14:08:23.863 に答える
2
  • あなたのコードは機能しています(ただし、あなたが望むことはしません。次のポイントを参照してください)
  • いいえ、GetRandomFileName は名前の一意性をチェックしません。代わりに GetTempFileName() を使用することをお勧めします。
  • ここでチェックする必要はありませんが、ファイルの使用 (書き込み) を開始すると、エラーが発生する場合があります (ディスクがいっぱいなど)。GetTempFileName() を使用する場合は、ファイルを作成できない場合や使用可能な一意の名前がない場合にエラーが返されるため、エラーのチェックを開始する必要があります。
于 2011-10-26T14:14:06.693 に答える
1

どうしたの:

string tmpFile = Path.GetTempFileName();

Path.GetTempFileName()の MSDN から:

ディスク上に一意の名前の 0 バイトの一時ファイルを作成し、そのファイルの完全なパスを返します。ファイルの拡張子は .TMP です。

既に存在するファイルを取得しないようにし、そのようなファイルを作成できない場合の障害シナリオに関する質問に関しては、次のようにします。

GetTempFileName メソッドを使用して、以前の一時ファイルを削除せずに 65535 を超えるファイルを作成すると、IOException が発生します。

一意の一時ファイル名が使用できない場合、GetTempFileName メソッドは IOException を発生させます。このエラーを解決するには、不要な一時ファイルをすべて削除します。

于 2011-10-26T14:08:47.477 に答える