Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-创建大小未知的字节数组?_C#_Class_Bytearray_Byte - Fatal编程技术网

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
方法的结果与您请求的字节数相同。