Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 24.02.2019
Сообщений: 318

OutOfMemoryException при выводе большого файла через WriteAllBytes

04.03.2021, 23:27. Показов 1382. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер, прогнал файл весом 360 МБ через ReadAllBytes и получил код на 1 ГБ, при обратной операции (при переводе кода в файл через WriteAllBytes) получаю ошибку System.OutOfMemoryException: "Измерения массива превысили поддерживаемый диапазон.", не подскажете как бороться?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 private void button1_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                var inputFile = File.ReadAllBytes(openFileDialog1.FileName);
                var str = BitConverter.ToString(inputFile);
 
                var fileName = Encoding.Unicode.GetBytes(openFileDialog1.SafeFileName);
                var fileNameString = BitConverter.ToString(fileName);
 
                richTextBox1.Text = fileNameString + "|" + str;
            }
 
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
           
            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                //имя файла
                string fileName = richTextBox1.Text.Substring(0, richTextBox1.Text.IndexOf("|"));
                //содержимое
                string fileContent = richTextBox1.Text.Substring(richTextBox1.Text.IndexOf("|")+1, richTextBox1.Text.Length- richTextBox1.Text.IndexOf("|")-1);
 
                //достаю имя файла
                String[] arr = fileName.Split('-');
                byte[] byteArr = new byte[arr.Length];
                for (int i = 0; i < fileName.Split('-').Length; i++)
                {
                    byteArr[i] = Convert.ToByte(fileName.Split('-')[i], 16);
                }
                fileName = Encoding.Unicode.GetString(byteArr);
 
                //достаю содержимое файла
                arr = fileContent.Split('-');
                byteArr = new byte[arr.Length];
                for (int i = 0; i < arr.Length; i++)
                    byteArr[i] = Convert.ToByte(arr[i], 16);
                File.WriteAllBytes(folderBrowserDialog1.SelectedPath + "\\" + fileName, byteArr);
            }
 
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.03.2021, 23:27
Ответы с готовыми решениями:

OutOfMemoryException при получении большого количества файлов из каталога
Доброго времени суток. Есть программа, которая в виде аргумента получает директорию, в которой она ищет и сравнивает все файлы и во всех...

Создание большого многомерного массива порождает OutOfMemoryException
Объявляю следующий массив: Dim Massiv(0 To 2, 0 To 2, 0 To 799, 0 To 599, 0 To 35) As Double В памяти он занимает порядка 1.2...

Падение Sublime Text 3 при выводе большого объема данных
Можно ли как-то сделать, чтобы саблайм всегда выводил текст построчно, а не целиком?

12
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
05.03.2021, 01:29
Код крайне неэффективный, создается куча бесполезного мусора. Странно как у вас вообще всё не повисло на этапе запихивания огромной строки в RTB.
0
2 / 2 / 0
Регистрация: 24.02.2019
Сообщений: 318
05.03.2021, 08:54  [ТС]
Какой код будет более эффективным?

Добавлено через 12 минут
Цитата Сообщение от Someone007 Посмотреть сообщение
Странно как у вас вообще всё не повисло
Висло) Но мы народ терпеливый, ждали минут 7 пока отработает и отвиснет))
0
Эксперт .NET
 Аватар для Usaga
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,450
05.03.2021, 09:33
Цитата Сообщение от Gabaz Посмотреть сообщение
var fileName = Encoding.Unicode.GetBytes(openFileDialog 1.SafeFileName);
var fileNameString = BitConverter.ToString(fileName);
Что это? Перегон строки в байты, а байты назад в строку? Зачем? Чтобы как в армии, процессор всегда был занят?
0
2 / 2 / 0
Регистрация: 24.02.2019
Сообщений: 318
05.03.2021, 11:05  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Перегон строки в байты, а байты назад в строку
Первом случае я из названия файла получаю byte массив, а во втором перевожу этот массив в шестнадцатеричную строку

Добавлено через 1 час 27 минут
Буду благодарен хотя бы за направление размышления в нужную сторону, а то из идей только эта.
0
Эксперт .NET
 Аватар для Usaga
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,450
05.03.2021, 13:34
Gabaz, а изначальная задумка какая? Это какой-то вариант HEX-редактра?
0
2 / 2 / 0
Регистрация: 24.02.2019
Сообщений: 318
05.03.2021, 14:10  [ТС]
Нашел такой вариант:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//Поток для чтения
                FileStream fsRead = new FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
                //Поток для записи
                FileStream fsWrite = new FileStream(@"D:\\1\"+ openFileDialog1.SafeFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
 
                byte[] buffer = new byte[256];
                int countReaded = 0;
                while ((countReaded = fsRead.Read(buffer, 0, buffer.Length)) > 0) //пока есть что считать из файла
                {
                    fsWrite.Write(buffer, 0, countReaded); //пишем в новый файл
                }
 
                fsRead.Close();
                fsWrite.Close();

У меня вопрос, как я могу представить fsWrite в виде строки, а потом (при нажатии на другую кнопку) эту строку уже первести в файл
0
Эксперт .NET
 Аватар для Usaga
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,450
05.03.2021, 17:00
Gabaz, что?
0
2 / 2 / 0
Регистрация: 24.02.2019
Сообщений: 318
05.03.2021, 21:51  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
изначальная задумка какая
Хочу получить код большого файла, чтобы скинуть его другу, а он его запустит через программу и вставив этот код получит файл. Не спрашивайте для чего, если есть интернет и флешки)
0
Эксперт .NET
 Аватар для Usaga
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,450
08.03.2021, 09:03
Gabaz, это вы так шифрование переизобрести пытаетесь?
0
2 / 2 / 0
Регистрация: 24.02.2019
Сообщений: 318
08.03.2021, 10:33  [ТС]
Типа того)Изучаю принцип работы на практике)
0
Эксперт .NET
 Аватар для Usaga
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,450
08.03.2021, 11:34
Gabaz, ну так шифруйте байты файла. Зачем в HEX переводить? Это нелепо.
1
2 / 2 / 0
Регистрация: 24.02.2019
Сообщений: 318
08.03.2021, 14:27  [ТС]
Да, я уже понял, спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.03.2021, 14:27
Помогаю со студенческими работами здесь

Скачивание большого файла через ajax без сохранения
Добрый день, подскажите плииз, такое возможно (гугл не помог) Пишу свой мини-фреймворк (и клиент и сервер) для связки Нода+JS и...

Передача большого файла клиенту через Response.BinaryWrite
Народ... Столкнулся с проблемой Отдаю через ASP скрипт файл клиенту. ------------------------------------------------ &lt;% ...

Разное содержимое БД при выводе через php и при открытии в программе
Добрый день. Работаю над простеньким онлайн хранилищем документов, на основе php (+pdo). В качестве БД использую SQlite. И вот...

При чтении из файла данные повторяются при выводе
здравствуйте! Объясните пожалуйста почему когда считываю из файла данные и вывожу их на экран они повторятся?if ((file =...

Ошибка при считывании большого файла
У меня есть большой файл(Если размер до 200мб то все ок) мне надо его прочитать построчно и записать в новый файл каждое слово...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru