11

任意のファイルから生のバイト配列を読み取り、そのバイト配列を新しいファイルに書き戻すにはどうすればよいですか?

4

4 に答える 4

7

byte[](編集:質問が変更されたことに注意してください。最初は言及されていませんでした。リビジョン1を参照してください)

まあ、File.Copy頭に浮かぶ。しかし、そうでなければ、これはシナリオのように聞こえStreamます:

    using (Stream source = File.OpenRead(inPath))
    using (Stream dest = File.Create(outPath)) {
        byte[] buffer = new byte[2048]; // pick size
        int bytesRead;
        while((bytesRead = source.Read(buffer, 0, buffer.Length)) > 0) {
            dest.Write(buffer, 0, bytesRead);
        }
    }
于 2009-09-20T07:59:02.823 に答える
5
byte[] data = File.ReadAllBytes(path1);
File.WriteAllBytes(path2, data);
于 2009-09-20T08:07:05.497 に答える
3

TextReaderTextWriter、およびそれらの子孫であるStreamReaderStreamWriterについて知っていますか?これらはエンコーディングを処理するため、問題は解決すると思います。BinaryReaderはエンコーディングやテキストさえも認識せず、バイトのみに関係します。

ファイルからテキストを読み取る方法

ファイルにテキストを書き込む方法

これは、ファイルIOとエンコーディングの優れた入門書です。

于 2009-09-20T07:59:46.207 に答える
0

最新の回答を追加して、

using (var source = File.OpenRead(inPath))
{
    using (var dest = File.Create(outPath))
    {
        source.CopyTo(dest);
    }
}

オプションでバッファサイズを指定できます

using (var source = File.OpenRead(inPath))
{
    using (var dest = File.Create(outPath))
    {
        source.CopyTo(dest, 2048); // or something bigger.
    }
}

または、別のスレッドで操作を実行することもできます。

using (var source = File.OpenRead(inPath))
{
    using (var dest = File.Create(outPath))
    {
        await source.CopyToAsync(dest);
    }
}

これは、メインスレッドがWPFやWindowsストアアプリなどの他の作業を行う必要がある場合に役立ちます。

于 2013-06-21T08:13:31.010 に答える