Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.65/40: Рейтинг темы: голосов - 40, средняя оценка - 4.65
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 271

Чтение файла по частям

29.06.2018, 11:25. Показов 8412. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте, нужно мне считать файл в память, при этом разделить файл на равные куски и потом как то обратиться к этим кускам.
Не понятен механизм разделения самого файла, и как потом к этим кускам обращаться. Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.06.2018, 11:25
Ответы с готовыми решениями:

Чтение бинарного файла по частям
Нужно разделить бинарный файл на куски и записать каждый в отдельный фаил: если размер файла 7 байт - то должно получится 4 фаила размером...

Загрузка большого текстового файла. Как грузить его по частям
Столкнулся с такой проблемой: при загрузке в "string" большого текстового файла методом "File.ReadAllText" вылетает исключение...

Чтение списка из файла и дальнейшее использование информации из файла
основная using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; ...

36
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 271
02.07.2018, 13:15  [ТС]
Студворк — интернет-сервис помощи студентам
это я понимаю как раз без бумаги, меня интересует наиболее оптимальная реализация этой операции, к примеру файл 30гб. какой мне буфер удобное сделать, потом родилась у меня мысль, могу я увидеть сколько оперативной памяти доступно и сделать буфер поболее чем 1024, для ускорения процесса. Но вот я и пытаюсь понять все эти процессы на более мелких файлах.
0
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
02.07.2018, 13:22
Мдфв1234, 1 мегабайт прекрасный размер для копирования. Сам по себе 1 мегабайт не будет никого тормозить.

Когда нарисуете отрезок 100 и буфер 20, следущая задача:
длинный файл оказался внезапно длиной 95. А буфер всё равно 20.
Вопрос - что делать и куда бежать?
0
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 271
02.07.2018, 13:29  [ТС]
а может тогда буфер сделать динамическим,?
Если кусок вдруг будет меньшего размера чем заданный буфер. тогда буфер просто уменьшиться. кусок не может стать больше, а меньше может, а задача далее идет чтобы соединить эти куски. Хотя вопрос , в том примере из мсдн, там есть параметр смещения байтов, его же можно сделать изменяемым?
0
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
02.07.2018, 14:31
Цитата Сообщение от Мдфв1234 Посмотреть сообщение
а может тогда буфер сделать динамическим,?
Буфер всегда 1 мегабайт. Массив не может менять размер.

А вот int realSize мы можем подсматривать ))
0
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 271
03.07.2018, 10:18  [ТС]
чет я совсем запутался)), реалсайз,это количество реально прочитанных бит?

Добавлено через 19 часов 21 минуту
И еще вопрос, не совсем понимаю, вот Read(byte[],offset,count) ,берет кусок данных и помещает его в массив, а чтобы мне его этот кусок данных забрать из массива,(мне нужно взять данные, и очистить массив и сказать потоку , мол загружай след часть?) как это сделать. и поток разве будет ждать пока массив очистится и поток снова туда отдаст порцию данных?
0
Эксперт .NET
 Аватар для Rius
13848 / 7890 / 1707
Регистрация: 25.05.2015
Сообщений: 23,957
Записей в блоге: 14
03.07.2018, 10:26
Цитата Сообщение от Мдфв1234 Посмотреть сообщение
вот Read(byte[],offset,count) ,берет кусок данных и помещает его в массив
Ага.
Цитата Сообщение от Мдфв1234 Посмотреть сообщение
а чтобы мне его этот кусок данных забрать из массива
Нет необходимости его забирать. Можно и прямо там обрабатывать.
Цитата Сообщение от Мдфв1234 Посмотреть сообщение
мне нужно взять данные, и очистить массив и сказать потоку , мол загружай след часть?
Не нужно.
Цитата Сообщение от Мдфв1234 Посмотреть сообщение
и поток разве будет ждать пока массив очистится и поток снова туда отдаст порцию данных?
Поток считает тогда, когда ему укажут считать.

Добавлено через 2 минуты
Пример применения: Шифрация большого файла без создания его копии для экономии места
1
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 271
03.07.2018, 11:05  [ТС]
как мне сказать потоку. что я уже закончил обработку куска и можно подавать второй?
0
Эксперт .NET
 Аватар для Rius
13848 / 7890 / 1707
Регистрация: 25.05.2015
Сообщений: 23,957
Записей в блоге: 14
03.07.2018, 11:05
Никак. Просто считать новую порцию.
0
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 271
03.07.2018, 11:49  [ТС]
Вот так я читаю часть файла и кладу эту часть в массив.
Или чего то не хватает?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 public static void Readd(string _path)
        {
            using (FileStream fsSource = new FileStream(_path, FileMode.Open, FileAccess.Read))
            {
                // читаю части файла
                int numBytesToRead = 1024; 
                byte[] bytes = new byte[numBytesToRead];
 
                int numBytesRead = 0;
                while (numBytesToRead > 0)
                {
                    
                    int n = fsSource.Read(bytes, numBytesRead, numBytesToRead);
 
                    
                    if (n == 0)
                        break;
 
                   
                }
            }
0
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
03.07.2018, 12:09
Мдфв1234, буфер постоянный и существует без метода Readd.

Зачем его стирать ластиком после каждого вызова метода Readd?
Опять не посмотрели на схему?
0
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 271
03.07.2018, 12:12  [ТС]
Нет стирать его не нужно, после каждого прохода данные в массиве обновляются сами.
0
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
03.07.2018, 12:14
Мдфв1234, Вы при каждом вызове метода Readd сейчас стираете буфер ластиком.
0
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 271
03.07.2018, 12:18  [ТС]
Поясните пожалуйста в каком месте я его стираю, не понял немного,
0
Эксперт .NET
 Аватар для Rius
13848 / 7890 / 1707
Регистрация: 25.05.2015
Сообщений: 23,957
Записей в блоге: 14
03.07.2018, 12:31
Мдфв1234,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void Readd(string _path)
{
    using (var fsSource = new FileStream(_path, FileMode.Open, FileAccess.Read))    {
        // читаю части файла
        int numBytesToRead = 1024; 
        byte[] bytes = new byte[numBytesToRead];
 
        int numBytesReaded;
        
        do {
            numBytesReaded = fsSource.Read(bytes, numBytesRead, numBytesToRead);
 
            if (numBytesReaded > 0) {
                // Обработка считанного массива
            }
           
        } while (numBytesReaded > 0)
    }
}
Если обработка идёт внутри метода, создание в нём массива - нормально.
0
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
03.07.2018, 13:25
Rius, вся обработка не идёт внутри метода. Метод только считывает в буфер часть огромного файла.
0
Эксперт .NET
 Аватар для Rius
13848 / 7890 / 1707
Регистрация: 25.05.2015
Сообщений: 23,957
Записей в блоге: 14
03.07.2018, 13:38
Цитата Сообщение от amr-now Посмотреть сообщение
Метод только считывает в буфер часть огромного файла
Такой метод уже существует - FileStream.Read, тогда тут вообще обсуждать и кодить нечего.
А обработка открытого файла частями обычно делается так, как выше показал.
0
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
03.07.2018, 13:40
Rius, сейчас подумал - если метод должен быть запускачем большой операции, то он назван неправильно.

Там одна из больших операций - считать огромный файл и насоздавать кучу мелких файлов - частей.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.07.2018, 13:40

Копирование файла по фиксированным частям
#include <stdio.h> FILE *f,*fr; int nsize=64; //byte int posled(void); int main(int argc, char *argv) { ...

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

При загрузке файла по частям сервер фиксирует ошибку UPLOAD_ERR_PARTIAL
Загружаю файл на сервер через сокет вызывая send. Сокет в неблокирующем режиме. Если передаю send сразу весь файл загрузка успешна. Для...

Как сигнатура узнает какие байты РЕ файла соответствуют ее частям?
КАК сигнатура узнает какие байты РЕ файла соотвецтвуют ее частям? К примеру, я хочу начать разбор файла. Отсчитывать байты равными...

Как заменить чтение строки из консоли на чтение текстового файла?
основное задание: найти частоту суффикса (например, "ing") в текстовом документе. в прикреплённом коде текст вводится прямо в консоль,...


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru