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

时间:2011-12-24 06:45:15

标签: c# class bytearray byte

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

public byte[] file;

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

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

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

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

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

3 个答案:

答案 0 :(得分:5)

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

 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
更新
请记住,上面的代码旨在突出您的原始问题,不应该按原样使用。理想情况下,您将使用缓冲区以块的形式读取流。看看this question and the solution suggested by Jon Skeet

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

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

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