[英]file copy program in binary mode
我正在编写文件复制程序,但是以二进制方式从媒体文件(例如.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();
}
}
}
有什么解决方案。
简而言之,如果您在谈论二进制,则永远不要涉及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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.