二进制模式下的文件复制程序

时间:2012-09-12 13:08:50

标签: c#

我正在编写一个文件复制程序,但是从二进制模式的.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();
        }
    }
}

解决方案是什么。

1 个答案:

答案 0 :(得分: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);
}

所以:写到stdout,这将是:

using(var inputStream = File.OpenRead(filename))
using(var outputStream = Console.OpenStandardOutput()) {
    inputStream.CopyTo(outputStream);
}