私はいくつかのコードをリファクタリングしていますが、いくつかのコメントを使用できる質問があります。
元のコードはファイルをストリームにダウンロードします。次に、一時ディレクトリのファイルにストリームを書き込み、File.Copy を使用して運用ディレクトリの既存のファイルを上書きします。
すぐにストリームを本番ディレクトリに書き込むのとは対照的に、最初に一時ディレクトリに書き込み、File.Copy を使用することには利点がありますか?
理由の 1 つは、File.Copy がストリームの書き込みよりも高速であり、書き込み中に誰かがファイルを読み取る可能性を減らしていることです。しかし、それは起こりえますか?他に何を念頭に置いておく必要がありますか。一時ディレクトリを除外することを検討しています。
MemoryStream stream = new MemoryStream();
....Download and valiate stream....
using (Stream sourceFileStream = stream)
{
using (FileStream targetFileStream = new FileStream(tempPath, FileMode.CreateNew))
{
const int bufferSize = 8192;
byte[] buffer = new byte[bufferSize];
while (true)
{
int read = sourceFileStream.Read(buffer, 0, bufferSize);
targetFileStream.Write(buffer, 0, read);
if (read == 0)
break;
}
}
}
File.Copy(tempPath, destination, true);
ストリームを宛先に書き込むだけとは対照的です。
これは私が持っていたコードです。次のようなものを適切に使用しますsourceFileStream.CopyToAsync(TargetFileStream);