Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
 Аватар для snake32
3514 / 1697 / 236
Регистрация: 26.02.2009
Сообщений: 8,499
Записей в блоге: 6

Много мелких файлов объединить в один

23.04.2010, 20:02. Показов 2996. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуте, господа программеры.

Сразу к делу. Задача такая: необходимо объединить тучу мелких файлов 4-28килов в один большой. Пробывал старым дедовским способом через AssignFile, BlockRead с кобинацей TFileStream и TMemoryStream, но всё равно очень медленно! Жестяк кряхтит уже 1,5 часа и всего 3Гб залил.

Может есть какие мега быстрые АПИ-ф-ии? Или как-нибудь разбить на потоки, хотя вряд ли поможет хард - один.
Есть хочь какие нибудь идеи?

Думаю, проблема из-за кол-ва мелких файлов, к которым я не могу найти быстрый доступ....
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.04.2010, 20:02
Ответы с готовыми решениями:

Как объединить много, 130 000 txt-файлов в один, включая подкаталоги?
Подскажите, как объединить много, 130 000 txt-файлов в один, включая подкаталоги? 150 папок, общий объем 150 Mb, потеря или замена...

Объединить несколько файлов в один
Такой вопрос. Дано множество файлов txt, в них таблицы типа Имя(таб)возраст(таб)пол(таб)телефон(таб)дата ...

Объединить несколько pdf-файлов в один
Появилась задача, добавить в MFC-приложение объединение нескольких pdf-файлов в один: Т.е. в окне CListCtrl, со списком файлов....

10
Тимуровец
 Аватар для Страдалецъ
445 / 285 / 50
Регистрация: 10.09.2009
Сообщений: 963
23.04.2010, 20:12
Цитата Сообщение от snake32 Посмотреть сообщение
Здравствуте, господа программеры.

Сразу к делу. Задача такая: необходимо объединить тучу мелких файлов 4-28килов в один большой. Пробывал старым дедовским способом через AssignFile, BlockRead с кобинацей TFileStream и TMemoryStream, но всё равно очень медленно! Жестяк кряхтит уже 1,5 часа и всего 3Гб залил.

Может есть какие мега быстрые АПИ-ф-ии? Или как-нибудь разбить на потоки, хотя вряд ли поможет хард - один.
Есть хочь какие нибудь идеи?

Думаю, проблема из-за кол-ва мелких файлов, к которым я не могу найти быстрый доступ....
Не надо заливать сразу на винт конечный файл. Соберите в памяти скажем первые 100 файлов а потом скиньте полученный результат, повторите операцию нужное количество раз добавляя к полученному файлу. Поверьте скорость вырастет на порядок.
0
 Аватар для snake32
3514 / 1697 / 236
Регистрация: 26.02.2009
Сообщений: 8,499
Записей в блоге: 6
23.04.2010, 20:19  [ТС]
Страдалецъ, Вы не поверите, но последний раз так и делал, Собирал в TMemoryStream 500 метров файлов, а потом добавлял к ТFileStream'у через WriteBuffer... но прибавке в скорости не заметил
Надо как-то обойти самый тормозной момент - загрузка мелких файлов...

Добавлено через 2 минуты
А можно ли как-нить загрузить все файлы разом в одной папке?
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
23.04.2010, 20:22
snake32, насколько я знаю файловые операции очень медленные, а файлов "в папке" фактически и не существует, данные же наверняка разбросаны по диску или даже фрагментированы
0
 Аватар для snake32
3514 / 1697 / 236
Регистрация: 26.02.2009
Сообщений: 8,499
Записей в блоге: 6
23.04.2010, 20:25  [ТС]
Структура такая: файлы лежат во многих папках. В одной папке до 1000 файлов...может эта информация поможет...

Добавлено через 44 секунды
insideone, да понятно, .... а вдруг?

Добавлено через 1 минуту
фрагментированы - это вряд ли... они сами по себе как фрагменты
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
23.04.2010, 20:30
И вообще, под виндами файлы не стоит читать потоками -- гораздо лучше проектировать их в память.
Если подробно -- это к Рихтеру.
Если коротко. Windows может спроектировать файл на адресное пространство процесса. После чего в вашем распоряжении окажется регион памяти, содержимое которого идентично содержимому файла.
Собственно говоря, когда прпоцесс стартует, то содержимое exe-шника и dll-ек проектируется таким образом в адресное пространство процесса.
По сути дела, проектировавние файлов -- это фундаментальный механизм работы менеджера виртуальной памяти в системе. С точки зрения ОС, память -- это содержимое диска, а физическое ОЗУ -- просто ещё один уровеоь кэша, поддерживаемый уже средствами операционной системы вместе с механизмом страничной организации памяти процессора.
Не знаю то ли... так, наводка. Но мало ли
1
 Аватар для snake32
3514 / 1697 / 236
Регистрация: 26.02.2009
Сообщений: 8,499
Записей в блоге: 6
23.04.2010, 20:33  [ТС]
Вот спасибо, insideone, хоть надежда появилась!!
Пошёл программить...
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
23.04.2010, 20:35
Кажется нагуглил:
CreateFileMapping ...

Очень интересно, как будет свободное время обязательно побалуюсь, звучит достаточно заманчиво читать файлы быстро
0
Тимуровец
 Аватар для Страдалецъ
445 / 285 / 50
Регистрация: 10.09.2009
Сообщений: 963
23.04.2010, 20:49
Сколько у вас файлов в папке и каков средний размер одного файла? И какая скорость загрузки скажем 1000 файлов получилась?
0
 Аватар для snake32
3514 / 1697 / 236
Регистрация: 26.02.2009
Сообщений: 8,499
Записей в блоге: 6
24.04.2010, 14:31  [ТС]
Страдалецъ,
Цитата Сообщение от snake32 Посмотреть сообщение
тучу мелких файлов 4-28килов
Скорость загрузки тысячи файлов не замерял, но есть приблизительное время формирования 3Гигов - час и 10 минут максимум - 20минут

Добавлено через 16 часов 35 минут
Решил написать тестовую прогу для вычисления только времени загрузки разными способами, но столкнулся с проблемой кэширования файлов. Первый прогон программы показал 42 секунды, остальные не более 5!! Иногда даже меньше 2 секунд!

Загружаемые файлы:
Размер: 31,3 МБ (32*899*711 байт)
На диске: 70,2 МБ (73*658*368 байт)
Содержит;Файлов: 12*957; папок: 257
Код:
Delphi
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
procedure LoadAsDef( const path:string );
  var f:file; fsize:DWORD; ImageBuf:array of Byte;
begin
  AssignFile( f, path );
  try
    Reset( f, 1 );
    fsize := FileSize( f );
    SetLength( ImageBuf, fsize );
    BlockRead( f, Pointer( ImageBuf )^, fsize );
  except
    ShowMessage('I can''t load file:'+path );
  end;
  CloseFile( f );
end;
procedure TForm2.ButtontestClick(Sender: TObject);
  const mapname='yamapng';
  var fpath,path, ext:string;
    i,j:integer;
    cutime:TDateTime;
begin
  ext := '.png';
  fpath := SasCachePath + mapname +'\z8\';
  cutime := Now;
  for j:=1 to 101 do // col
  for i:=0 to 127 do // row
    begin
      path := GetFullPathTile( fpath, ext, i, j );
      LoadAsDef( path );
    end;
  cutime:= Now - cutime;
  ShowMessage( FormatDateTime( 'hh:mm:ss.zzz', cutime ) );
end;
Хотел подменять процедуру LoadAsDef и смотреть среднее время.

Как можно временно отключить кэш диска? Или лучше как пометить некоторые файлы, что бы система их закэшировала перед последующим чтением? Если это возможно, то необходимо знать размер кэша харда/хардов и как-то наверно указать порцию кэшируемых файлов. Так?

Добавлено через 8 минут
хотя кэшировать, наверно, бессмысленно, так как файлы будут считаны единожды
0
 Аватар для snake32
3514 / 1697 / 236
Регистрация: 26.02.2009
Сообщений: 8,499
Записей в блоге: 6
26.04.2010, 15:27  [ТС]
Немного ускорил работу отключением индексации на диске и отключением Каспера...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.04.2010, 15:27
Помогаю со студенческими работами здесь

Как объединить несколько файлов в один
привет подскажите плиз как объединить данные из несколько типичных файлов xls и только из первого листа в один сводный файл

Объединить множество word файлов в один
Изначально у нас есть 100 отдельных word файлов, нужно сделать так, чтобы они все были в одном файле на 100 страниц. Если просто...

Объединить код из нескольких файлов в один
Всем привет! Только начинаю изучать c# появилась проблема. Есть пару функций, которые в отдельных файлах. Требуется , чтобы они были в...

Объединить упорядоченныые элементы из двух файлов в один
Наговнокодил такое вот... даже не знаю как назвать... Задача такая "Элементы файлов f1 и f2 упорядочены по не убыванию. Объединить эти...

Объединить содержимое нескольких текстовых файлов в один
Напишите командный файл, который позволяет объединить содержимое не- скольких текстовых файлов в один, имя которого должно задаваться в...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru