スポンサーリンク

【C#】StreamやHttpResponseでファイル破損や処理停止回避方法。

C#
スポンサーリンク

今回の記事は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#関連の記事を記載しているので是非そちらも参考にしてみてください。

本記事を読んでいただき感謝です。サイトを訪れていただいた方はプログラミング勉強中かと思いますのでプログラミング勉強のコツを合わせてご紹介。

スポンサーリンク
スポンサーリンク
スポンサーリンク

ブログに関しては500円程度かかりますが、それ以外は無料です。知識の吸収と並行してアウトプットは非常に効率が良いです。テックアカデミーに関しては講座レベルが高いにも関わらず、無料体験や人気口座も大幅値下げがあるので、重点的に学びたいものを無料体験してみてください。

転職時にも、エンジニアからテックアカデミー・Paizaは認知度が高いので、未経験入社採用を行う際履歴書で目に留まります。特にPaizaのスキルレベルA・SなどはIT業界でも評価されます。

テックアカデミー・Paizaの無料登録ができる期間中にぜひご利用してみてください。私も活用経験ありです。

C#
スポンサーリンク
スポンサーリンク

コメント

タイトルとURLをコピーしました