2011-12-24 46 views
4

我想创建一个类来管理某个文件的打开。我将其中一个属性作为文件的字节数组,但我不知道该文件有多大。我试图宣布的字节数组为:C# - 创建未知大小的字节数组?

public byte[] file; 

...但它不会允许我设置它的方式,我已经尝试过。 br为我BinaryReader在:

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

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

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

编辑:好的,我认为这是因为二进制阅读器的BaseStream长度很长,但它的读者采用int32计数。如果我将64位转换为32位,是否有可能在较大的文件中丢失字节?

+0

要回答你的第二个问题,文件必须是大于二千兆字节在这成为问题之前。 – 2011-12-24 06:55:55

+0

@RobertHarvey - 尽管这是运行时限制的限制,但由于机器上的内存压力,可能会导致文件明显变小。 – codekaizen 2011-12-24 07:00:57

+0

@Walkerneo - 请注意,此方法的签名允许您创建一个较小的数组,例如4096个字节,然后在循环中调用它,而“Read”方法的结果与您所用的字节数相同。已经要求。 – codekaizen 2011-12-24 07:02:42

回答

4

我没有问题读取文件流:

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

您的代码不编译,因为BaseStream的长度属性是long型的,但你要使用它作为一个int。隐式转换可能会导致数据丢失,因此您必须明确将其转换为int
更新
只要记住上面的代码旨在突出你原来的问题,不应该使用,因为它是。理想情况下,您可以使用缓冲区以块的形式读取数据流。看看this question and the solution suggested by Jon Skeet

0

你不能创建未知大小的数组。

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

PS:您应该必须反复读取较大文件的字节块。