繁体   English   中英

C# - 创建未知大小的字节数组?

[英]C# - Creating byte array of unknown size?

我正在尝试创建一个类来管理某个文件的打开。 我将其中一个属性作为文件的字节数组,但我不知道该文件有多大。 我尝试将字节数组声明为:

public byte[] file;

......但它不允许我按照我尝试的方式设置它。 br是我的BinaryReader:

file = br.ReadBytes(br.BaseStream.Length);

br.Read(file,0,br.BaseStream.Length);

两种方式都不奏效。 我认为这是因为我没有初始化我的字节数组,但如果我不知道它的大小,我不想给它一个大小。 有任何想法吗?

编辑:好吧,我认为这是因为Binary Reader的BaseStream长度很长,但它的读者需要int32计数。 如果我将64s转换为32s,是否有可能在较大的文件中丢失字节?

我在读取文件流时没有问题:

 byte[] file;
 var br = new BinaryReader(new FileStream("c:\\Intel\\index.html", FileMode.Open));
 file = br.ReadBytes((int)br.BaseStream.Length);

您的代码无法编译,因为BaseStream的Length属性的类型为long但您尝试将其用作int 不允许隐式转换可能导致数据丢失,因此您必须明确地将其强制转换为int
更新
请记住,上面的代码旨在突出您的原始问题,不应该按原样使用。 理想情况下,您将使用缓冲区以块的形式读取流。 看看这个问题以及Jon Skeet建议的解决方案

BinaryReader.ReadBytes返回一个byte []。 无需初始化字节数组,因为该方法已在内部执行此操作并将完整数组返回给您。

如果你想从文件中读取所有字节,那么File类中有一个方便的方法:

http://msdn.microsoft.com/en-us/library/system.io.file.readallbytes.aspx

您无法创建未知大小的数组。

byte []file=new byte[br.BaseStream.Length];

PS:你应该重复读取大块文件的字节块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM