0

filecopy プログラムを作成していますが、バイナリ モードで .avi などのメディア ファイルから文字列変数 str にデータを読み取ると、変数 str のサイズがファイル読み取りから返されたデータを保持するのに十分な大きさでないことに関連するエラーがスローされます。 . これは、タスクを実行しようとしていたコードです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
            string filename;
            Console.WriteLine("enter file location");
            filename=Console.ReadLine();
            FileStream fs = new FileStream(filename, FileMode.Open);
            BinaryReader br = new BinaryReader(fs);
            string str;
            str =Convert.ToString(br.Read());
            while (str != null)
            {
                Console.WriteLine(str);
                str = Convert.ToString(br.Read());
            }
            fs.Close();
            br.Close();
        }
    }
}

これに対する解決策は何ですか。

4

1 に答える 1

4

string簡単に言えば、バイナリについて話している場合は関与しないでください。ただし、結果として、コンソールがバイナリ モードでない限り、コンソールに書き込むことはあまり意味がありません。基本的なバイナリ コピー ループは次のようになります。

using(var inputStream = OpenSomeStream()) {
    byte[] buffer = new byte[8192];
    int read;
    while((read = inputStream.Read(buffer, 0, buffer.Length)) > 0) {
       // TODO: write "read"-many bytes from buffer
    }
}

ただし、ストリームからストリームへのコピーの場合、これは次のように省略できます。

using(var inputStream = OpenSomeStream())
using(var outputStream = OpenSomeOtherStream()) {
    inputStream.CopyTo(outputStream);
}

so: への書き込みのstdout場合、これは次のようになります。

using(var inputStream = File.OpenRead(filename))
using(var outputStream = Console.OpenStandardOutput()) {
    inputStream.CopyTo(outputStream);
}
于 2012-09-12T13:13:25.587 に答える