mohsen_popo Ответов: 2

Как прочитать большой файл (до 4 ГБ) и преобразовать его в байт?


Привет.
Я хочу читать файлы с большим объемом и переменной Byte [] put.

Ниже код не работает
байт[] байт = система.ИО.Файл.ReadAllBytes(имя файла);

ОПЕРАЦИОННАЯ

private byte [] StreamFile(строковое имя файла)
{
FileStream fs = новый FileStream(filename, FileMode.Открытия,Флагами Fileaccess.Читать);

// Создать байтовый массив длины потока файлов
byte[] ImageData = новый байт[fs.Длина];

// Чтение блока байтов из потока в массив байтов
fs. Read(ImageData, 0, System.Преобразовать.ToInt32 (fs.длина));

//Закрываем файловый поток
ПС.Рядом();
вернуться она; //возвращаем байт данных
}

ОПЕРАЦИОННАЯ

Трансляция дест = ...
using(Stream source = File.OpenRead(путь)) {
byte [] buffer = новый байт[2048];
int bytesRead;
while ((bytesRead = source.Read (buffer, 0, buffer.Длина)) > 0) {
дест.Write(buffer, 0, bytesRead);
}
}

Что я уже пробовал:

Как прочитать большой файл (до 4 ГБ) и преобразовать его в байт?

Henrik Jonsson

Вы должны указать, какой тип ошибки (исключения) вы получаете, чтобы позволить нам помочь вам лучше.

Пожалуйста, обратите внимание, что существует ограничение на размер 2G любого из них .NET object, даже на 64-битных системах. Видишь http://stackoverflow.com/questions/1087982/single-objects-still-limited-to-2-gb-in-size-in-clr-4-0?noredirect=1&lq=1

Patrice T

Читать большой файл, чтобы сделать что ?

2 Ответов

Рейтинг:
0

OriginalGriff

В принципе, вы не можете этого сделать, особенно с массивом байтов.
Вы можете сделать это для объектов размером более 2 ГБ, если вы:
1) работает в 64-битном режиме на 64-битной системе. 32-битные приложения не могут обращаться к памяти размером более 2 ГБ.
2) работают под управлением .NET Framework V4.5 или выше.
И
3) Установите gcAllowVeryLargeObjects в вашем app. config: элемент gcAllowVeryLargeObjects[^]
Но... индексаторы массивов по - прежнему ограничены целым числом-поэтому вы не можете сделать это с байтовыми массивами, так как ваш индекс массива будет слишком большим.
Вы можете сделать это с потоком (допускается~8 ТБ), но не с массивом.

И честно говоря, если вам нужно загрузить в память один такой большой файл, вам, вероятно, нужно посмотреть, как работает ваше приложение, потому что, вероятно, что-то очень не так с вашим базовым алгоритмом...


mohsen_popo

Примером может служить просмотр и загрузка

OriginalGriff

"для просмотра" - вы серьезно рассматриваете возможность просмотра изображения объемом 4 ГБ? Даже если бы это было растровое изображение (наименее эффективное пространство), это все равно изображение 32K на 32K: для его отображения потребуется примерно 128 4ktv...а не среднее окно браузера...
Если вместо этого вы говорите о видео, то транслируйте эту чертову штуку-даже не пытайтесь ее загрузить!

mohsen_popo

Если это возможно для пошагового руководства, я буду благодарен или представлю действительный источник

OriginalGriff

Извините, но вам придется более подробно объяснить, что именно вы пытаетесь сделать, включая среду, в которой вы работаете, и чего вы пытаетесь достичь!

mohsen_popo

Да, я именно тот контент, который нужен

OriginalGriff

Извините, но в изоляции это не имеет никакого смысла...

Рейтинг:
0

mohsen_popo

Примером может служить просмотр и загрузка