[解決済み] あるストリームの内容を別のストリームにコピーするにはどうすればよいですか?
質問
あるストリームの内容を別のストリームにコピーするのに最適な方法は何ですか?このための標準的なユーティリティ・メソッドはありますか?
どのように解決するのですか?
.NET 4.5 以降は
Stream.CopyToAsync
メソッド
input.CopyToAsync(output);
これは
Task
というように、完了すると続きができるようになります。
await input.CopyToAsync(output)
// Code from here on will be run in a continuation.
を呼び出す場所によっては
CopyToAsync
が作られると、それに続くコードはそれを呼び出したのと同じスレッドで継続されるかもしれませんし、そうでないかもしれません。
は、その
SynchronizationContext
を呼び出したときにキャプチャされた
await
は、継続がどのスレッドで実行されるかを決定します。
さらに、この呼び出しは (これは実装の詳細であり、変更される可能性があります) リードとライトのシーケンスを行います (I/O完了時にブロックするスレッドを無駄にしないだけです)。
.NET 4.0以降では、.NET 4.0に対応した
Stream.CopyTo
メソッド
input.CopyTo(output);
.NET 3.5以前の場合
フレームワークにはこれを支援するものが組み込まれていないので、このように手動でコンテンツをコピーする必要があります。
public static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[32768];
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write (buffer, 0, read);
}
}
注1:このメソッドでは、進捗状況を報告することができます(これまで読んだバイト数はx個 ...)
注2:なぜ固定バッファサイズを使用し
input.Length
? なぜなら、その長さは利用できないかもしれないからです! からの
ドキュメント
:
Stream から派生したクラスがシークをサポートしていない場合、Length、SetLength、Position、および Seek を呼び出すと NotSupportedException がスローされます。
関連
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] ディープクローンオブジェクト
-
[解決済み] 複数の例外を一度にキャッチする?
-
[解決済み] C#でenumからint値を取得する
-
[解決済み] 型チェック:typeof、GetType、is?
-
[解決済み] あるコンストラクタを別のコンストラクタから呼び出す
-
[解決済み] 文字列からストリームを生成するにはどうすればよいですか?
-
[解決済み] C#でディレクトリの中身を丸ごとコピーする
-
[解決済み】大文字・小文字を区別しない「Contains(string)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み】WebResource.axdとは何ですか?
-
[解決済み】Nullableオブジェクトは値を持たなければならない?