今回の記事はC#でFileStreamやHttpResponseで取得したファイルのファイル破損や
処理の停止などを回避する方法に関してご紹介します。サンプルコードを交えて解説しますので是非参考にしてください。
C#でFileStreamやHttpResponseでファイル破損や処理停止回避方法
基本的にfilestreamを使用する際は別のstreamからコピーなどの操作が多いかと思います。文字をテキスト入力程度であればそこまで気にする必要はないかと思います。
pdfをjpg変換、Webレスポンスをファイル変換などの際に注意が必要です。
下記よく処理が止まる箇所のご紹介
using (var fileStream = File.Create(path))
{
Console.WriteLine("レスポンス取得");
using (var httpStream = await response.Content.ReadAsStreamAsync())
{
Console.WriteLine("ストリームコピー開始");
await httpStream.CopyToAsync(fileStream);
Console.WriteLine("ファイルコピー開始");
fileStream.Flush();
Console.WriteLine("ファイルコピー完了");
}
}
この場合は処理を遅らせてください。
using (var fileStream = File.Create(path))
{
Console.WriteLine("レスポンス取得");
using (var httpStream = await response.Content.ReadAsStreamAsync())
{
await Task.Delay(500);
Console.WriteLine("ストリームコピー開始");
await httpStream.CopyToAsync(fileStream);
Console.WriteLine("ファイルコピー開始");
fileStream.Flush();
await Task.Delay(200);
Console.WriteLine("ファイルコピー完了");
}
}
非同期処理にはなりますが、レスポンスが帰ってきてすぐに処理を開始するので大量のデータを扱う場合は間隔を少しあける必要があります。
また、レスポンスが帰ってくる上記で 「await Task.Delay(500)」を記載している箇所をWifi機材の通信回線幅によってももう少し大きくするかなどの調整は必要です。
今回の記事は以上です。自身がハマった箇所なのでその備忘録になります。他にも多数のC#関連の記事を記載しているので是非そちらも参考にしてみてください。
コメント