編集:どうやら、私の提案は間違っている/無効である/何でもあります...余分なパフォーマンスを達成できない点まで高度にリファクタリングされている疑いのない他のものの1つを使用してください(そうでない場合、それらは私と同じくらい無効です)
using (System.IO.StreamReader sr = new System.IO.StreamReader(@"C:\mydata.dat"))
{
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\mynewdata.dat"))
{
byte[] bytes = new byte[1024];
int count = 0;
while((count = sr.BaseStream.Read(bytes, 0, bytes.Length)) > 0){
sw.BaseStream.Write(bytes, 0, count);
}
}
}
すべてのバイトを読み取る
byte[] bytes = null;
using (System.IO.StreamReader sr = new System.IO.StreamReader(@"C:\mydata.dat"))
{
bytes = new byte[sr.BaseStream.Length];
int index = 0;
int count = 0;
while((count = sr.BaseStream.Read(bytes, index, 1024)) > 0){
index += count;
}
}
すべてのバイトを読み取る/すべてのバイトを書き込む(svickの回答から):
byte[] bytes = File.ReadAllBytes(@"C:\mydata.dat");
File.WriteAllBytes(@"C:\mynewdata.dat", bytes);
他の回答を使用したパフォーマンス テスト:
私の回答(StreamReader)(上記の最初の部分、ファイルコピー)とsvickの回答(FileStream/MemoryStream)(最初のもの)の間で簡単なテストを行いました。テストはコードの 1000 回の反復です。ここに 4 つのテストの結果があります (結果は秒単位であり、すべての実際の結果はこれらの値をわずかに上回っています)。
My Code | svick code
--------------------
9 | 12
9 | 14
8 | 13
8 | 14
ご覧のとおり、少なくとも私のテストでは、コードのパフォーマンスが向上しました。おそらく注意すべきことの 1 つは、文字ストリームを読み取っていないことです。実際には、バイト ストリームを提供している BaseStream にアクセスしています。おそらく、svick の答えは遅いでしょう。なぜなら、彼は 2 つのストリームを読み取り用に使用し、次に 2 つのストリームを書き込み用に使用しているからです。もちろん、パフォーマンスを改善するために svick の回答に対して実行できる多くの最適化があります (また、単純なファイル コピーの代替手段も提供しました)。
3 番目のオプション (ReadAllBytes/WriteAllBytes) を使用したテスト
My Code | svick code | 3rd
----------------------------
8 | 14 | 7
9 | 18 | 9
9 | 17 | 8
9 | 17 | 9
注: ミリ秒単位では、3 番目のオプションが常に優れていました