C#-创建大小未知的字节数组?
我正在尝试创建一个类来管理某个文件的打开。我希望其中一个属性是文件的字节数组,但我不知道文件会有多大。我尝试将字节数组声明为:C#-创建大小未知的字节数组?,c#,class,bytearray,byte,C#,Class,Bytearray,Byte,我正在尝试创建一个类来管理某个文件的打开。我希望其中一个属性是文件的字节数组,但我不知道文件会有多大。我尝试将字节数组声明为: public byte[] file; …但它不允许我按照我尝试过的方式来设置。br是我的二进制读取器: file = br.ReadBytes(br.BaseStream.Length); br.Read(file,0,br.BaseStream.Length); 这两种方法都行不通。我假设这是因为我没有初始化我的字节数组,但是如果我不知道大小,我不想给它一个大
public byte[] file;
…但它不允许我按照我尝试过的方式来设置。br是我的二进制读取器:
file = br.ReadBytes(br.BaseStream.Length);
br.Read(file,0,br.BaseStream.Length);
这两种方法都行不通。我假设这是因为我没有初始化我的字节数组,但是如果我不知道大小,我不想给它一个大小。有什么想法吗
编辑:好的,我认为这是因为二进制读取器的基流长度很长,但是它的读取器使用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
。
更新
请记住,上面的代码旨在强调您的原始问题,不应按原样使用。理想情况下,您可以使用缓冲区以块的形式读取流。查看一下您不能创建大小未知的数组
byte []file=new byte[br.BaseStream.Length];
PS:您应该重复读取较大文件的字节块。BinaryReader.ReadBytes返回字节[]。无需初始化字节数组,因为该方法已在内部进行初始化,并将完整数组返回给您 如果要读取文件中的所有字节,则file类中有一个方便的方法:
要回答第二个问题,文件必须大于2GB才能成为问题。@RobertHarvey-虽然这是正确的,因为这是运行时施加的限制,由于计算机上的内存压力,文件明显变小可能会出现问题。@walkereno-注意,此方法的签名允许您创建一个更小的数组,比如4096字节,然后在循环中调用它,而
Read
方法的结果与您请求的字节数相同。