powered by simpleCommunicator - 2.0.34     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Разбиение большого файла на маленькие со сжатием Gzip
13 сообщений из 13, страница 1 из 1
Разбиение большого файла на маленькие со сжатием Gzip
    #40101652
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стоит задача разбивать большие файлы (возможно по несколько ГБ), на несколько маленьких по заданному количеству строк. С возможностью сжатия конечного файла GZIP. Вроде задача не супер сложная, но меня не устраивает потребление памяти.
Считывал файл построчно StreamReader, сначала в stringbuilder, но программа съедала памяти в 2-3 раза больше чем сами данные.
Потом перешел на массив строк с последующим преобразованием в массив байт и сжатием через gzipstream . Но тоже потребление памяти раза в 2 выше чем сами данные. Хочу сжатие производить в оперативке, чтобы не нагружать файловую систему. Подскажите возможно ли как-то реализовать чтение файла и запись его в поток gzip c минимальными затратами оперативки?
...
Рейтинг: 0 / 0
Разбиение большого файла на маленькие со сжатием Gzip
    #40101660
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как то так, не?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
const int LinesCount = 100;
int fileNumber = 0;
using (var source = File.OpenRead("path"))
using (var textReader = new StreamReader(source))
{

    while (!textReader.EndOfStream)
    {
        using (var target = File.Create($"filename_{++fileNumber}"))
        using (var gzipStream = new GZipStream(target, CompressionLevel.Optimal))
        using (var writer = new StreamWriter(gzipStream))
        {
            for (var i = 0; i < LinesCount && !textReader.EndOfStream; i++)
            {
                var line = await textReader.ReadLineAsync();
                await writer.WriteLineAsync(line);
            }
        }
    }
}
...
Рейтинг: 0 / 0
Разбиение большого файла на маленькие со сжатием Gzip
    #40101722
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452
Стоит задача разбивать большие файлы (возможно по несколько ГБ), на несколько маленьких по заданному количеству строк. С возможностью сжатия конечного файла GZIP. Вроде задача не супер сложная, но меня не устраивает потребление памяти.
Считывал файл построчно StreamReader, сначала в stringbuilder, но программа съедала памяти в 2-3 раза больше чем сами данные.
Потом перешел на массив строк с последующим преобразованием в массив байт и сжатием через gzipstream . Но тоже потребление памяти раза в 2 выше чем сами данные . Хочу сжатие производить в оперативке, чтобы не нагружать файловую систему . Подскажите возможно ли как-то реализовать чтение файла и запись его в поток gzip c минимальными затратами оперативки?


так вы чего хотите на худой конец?

к слову: зипование - оно же тоже не построчно делается, эта фигня оценивает (читает) весь файл перед тем как начать зиповать и т.д.
...
Рейтинг: 0 / 0
Разбиение большого файла на маленькие со сжатием Gzip
    #40101724
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

любой архиватор более менее нормальный умеет сжимать потоки, никакие полные файлы ему для этого не нужно.
а gzip'у это сам бог велел уметь.
...
Рейтинг: 0 / 0
Разбиение большого файла на маленькие со сжатием Gzip
    #40101727
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes
как то так, не?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
const int LinesCount = 100;
int fileNumber = 0;
using (var source = File.OpenRead("path"))
using (var textReader = new StreamReader(source))
{

    while (!textReader.EndOfStream)
    {
        using (var target = File.Create($"filename_{++fileNumber}"))
        using (var gzipStream = new GZipStream(target, CompressionLevel.Optimal))
        using (var writer = new StreamWriter(gzipStream))
        {
            for (var i = 0; i < LinesCount && !textReader.EndOfStream; i++)
            {
                var line = await textReader.ReadLineAsync();
                await writer.WriteLineAsync(line);
            }
        }
    }
}


Спасибо, это примерно то что нужно. Видимо я слишком ограниченно читал документацию. Там пример для gzipstream через copyto. Вот и не дошло сразу как это применять
...
Рейтинг: 0 / 0
Разбиение большого файла на маленькие со сжатием Gzip
    #40101730
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes
Ролг Хупин,

любой архиватор более менее нормальный умеет сжимать потоки, никакие полные файлы ему для этого не нужно.
а gzip'у это сам бог велел уметь.


не спорю, я предположил, хорошо, если так, если зип умеет оценить файл без чтения всего, оценить таблицу кодировки и т.д.
...
Рейтинг: 0 / 0
Разбиение большого файла на маленькие со сжатием Gzip
    #40101755
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
Roman Mejtes
Ролг Хупин,

любой архиватор более менее нормальный умеет сжимать потоки, никакие полные файлы ему для этого не нужно.
а gzip'у это сам бог велел уметь.


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

Ну кодировку можно в ридере и врайтере задать
...
Рейтинг: 0 / 0
Разбиение большого файла на маленькие со сжатием Gzip
    #40101786
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452
Ролг Хупин
пропущено...


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

Ну кодировку можно в ридере и врайтере задать


имелась в виду не та кодировка, ну да, ладно
...
Рейтинг: 0 / 0
Разбиение большого файла на маленькие со сжатием Gzip
    #40101812
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
не спорю, я предположил, хорошо, если так, если зип умеет оценить файл без чтения всего, оценить таблицу кодировки и т.д.
естественно, словарь ему нужно составить, то есть прочитать более-менее заметную часть, другой вопрос, что он может читать блоками, а не анализировать весь файл, это слишком долго. ЕМНИП в диалоге 7zip можно даже задать размер этого блока
...
Рейтинг: 0 / 0
Разбиение большого файла на маленькие со сжатием Gzip
    #40101841
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Зачем оценивать файл? Мне нужно его просто сжать
...
Рейтинг: 0 / 0
Разбиение большого файла на маленькие со сжатием Gzip
    #40101902
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И сразу возник вопрос, как добавить данные к файлу, который уже под GZIP не распаковывая его?
...
Рейтинг: 0 / 0
Разбиение большого файла на маленькие со сжатием Gzip
    #40101908
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452
Зачем оценивать файл? Мне нужно его просто сжать
Чтобы сжать, нужно найти повторяющиеся паттерны и составить их словарь. Это значит, что придется все равно просматривать на сколько-то вперед, нельзя просто сжать поток байт-за-байтом, какой-то оцениваемый блок так или иначе будет
...
Рейтинг: 0 / 0
Разбиение большого файла на маленькие со сжатием Gzip
    #40102495
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вангую, имхо: обыкновенное ТЗ, парня решили прощупать на больших данных, зип куска - лирика, кусок можно на стенку повесить,
почтой отправить ... или ещёчо
Бро, достойно решил, в стиле российских гос. структур ( насмотрелся этого ужаса), вытащить все в билдер и прифуярит все что можно ))
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Разбиение большого файла на маленькие со сжатием Gzip
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]