Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.08.18;
Скачать: CL | DM;

Вниз

Оценить приблизительное количество файлов папке и ее подпапках   Найти похожие ветки 

 
JzckFromTheShadow ©   (2013-03-19 11:26) [0]

Написал программку синхронизации папки в другое место с помощью API-шных TSearchRec и TSHFileOpStruct, все работает замечательно, один минус... Хотелось бы сделать общий прогресс копирования файлов... но для этого надо знать общее количество файлов и подпапок в синхронизируемой папке...
Сам вижу только в 2 прохода сделать такое: первым проходом по всем элементам посчитать общее количество элементов структуры TSearchRec и в прогресс ставить это число, а вторым проходом уже копировать непосредственно сами файлы и папки... Но как то это очень некрасиво... да и время опять же прилично уйдет только на подсчет папки с кол-вом файлов и подпапок за 2-3 тысячи. Может кто подскажет более красивое решение?


 
Rouse_ ©   (2013-03-19 11:28) [1]


> Но как то это очень некрасиво... да и время опять же прилично
> уйдет только на подсчет папки с кол-вом файлов и подпапок
> за 2-3 тысячи. Может кто подскажет более красивое решение?

Windows так и делает и никто не говорит что это не красиво :)


 
robt   (2013-03-19 11:34) [2]

эмм...
приблизительное количество файлов в папке и ее подпапках обычно равно +\-10% от ее предыдущего состояния


 
clickmaker ©   (2013-03-19 11:50) [3]

а синхронизация - это разве тупое копирование? Все равно же составляются списки файлов, подлежащих синхронизации либо с одной, либо с обеих сторон


 
знайка   (2013-03-19 11:57) [4]


> а синхронизация - это разве тупое копирование?
а разве нет? :)


 
Inovet ©   (2013-03-19 11:58) [5]

> [4] знайка   (19.03.13 11:57)
> а разве нет? :)

xcopy.exe


 
JzckFromTheShadow ©   (2013-03-19 12:30) [6]


> robt   (19.03.13 11:34) [2]
> эмм...
> приблизительное количество файлов в папке и ее подпапках
> обычно равно +\-10% от ее предыдущего состояния


сори, имел в виду когда первый раз копирую и в папке куда копирую еще ничего нет


> clickmaker ©   (19.03.13 11:50) [3]
> а синхронизация - это разве тупое копирование? Все равно
> же составляются списки файлов, подлежащих синхронизации
> либо с одной, либо с обеих сторон


список не составляю, а прямым перебором проверяю время изменения


 
JzckFromTheShadow ©   (2013-03-19 12:31) [7]


> Rouse_ ©   (19.03.13 11:28) [1]
>
> Windows так и делает и никто не говорит что это не красиво
> :)


спасибо :)


 
O'ShinW ©   (2013-03-19 12:33) [8]


> а разве нет? :)

а не "из двух источников остаются более новые файлы"?


 
clickmaker ©   (2013-03-19 12:50) [9]

> прямым перебором проверяю время изменения

тогда тебе придется проверять время дважды: 1-й в процессе подсчета кол-ва, 2-й уже в ходе копирования. Лучше составить список и уже тупо копировать его


 
JzckFromTheShadow ©   (2013-03-19 12:58) [10]

некоторые файлы в папке, из которой копирую заменяются раз в 5 сек, поэтому пока список составлю другие изменятся)


 
clickmaker ©   (2013-03-19 13:04) [11]

> заменяются раз в 5 сек, поэтому пока список составлю другие
> изменятся

тогда фиксированный прогресс вообще смысла не имеет. Начинай копирование, не дожидаясь окончания подсчета, в процессе корректируй прогресс


 
O'ShinW ©   (2013-03-19 13:12) [12]

тогда (отслеженные, например, по ReadDirectoryChanges) измененные файлы пусть опять встают в конец списка


 
Дмитрий С ©   (2013-03-19 13:16) [13]

Или использовать теневое копирование.


 
Inovet ©   (2013-03-19 13:17) [14]

> [10] JzckFromTheShadow ©   (19.03.13 12:58)
> некоторые файлы в папке, из которой копирую заменяются раз
> в 5 сек, поэтому пока список составлю другие изменятся)

Так, может, подождать минуту-другую, да и не копировать ничего.


 
JzckFromTheShadow ©   (2013-03-19 13:32) [15]

почитал вот эти статьи: http://www.webdelphi.ru/2011/08/monitoring-izmenenij-v-direktoriyax-i-fajlax-sredstvami-delphi-chast-1/ и http://www.webdelphi.ru/2011/08/monitoring-izmenenij-v-direktoriyax-i-fajlax-sredstvami-delphi-chast-2/.
Тоже интересный подход к синхронизации...


 
DVM ©   (2013-03-19 13:56) [16]


> clickmaker ©   (19.03.13 12:50) [9]
> > прямым перебором проверяю время изменения
>
> тогда тебе придется проверять время дважды: 1-й в процессе
> подсчета кол-ва, 2-й уже в ходе копирования. Лучше составить
> список и уже тупо копировать его

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


 
clickmaker ©   (2013-03-19 13:58) [17]

> файл из списка кто-то или что-то может удалить во время
> копирования

ну если удален, то не копируем. делов-то


 
robt   (2013-03-19 14:14) [18]


> JzckFromTheShadow ©   (19.03.13 12:30) [6]

утя в любом раскладе копироваться будет в 1500раз медленней чем сбор статистики


 
JzckFromTheShadow ©   (2013-03-19 15:05) [19]

спасибо откликнувшимся, не стоит больше спорить)


 
Лукошко   (2013-03-19 15:20) [20]

10 с лишним тысяч файлов, раскиданных по порядка 150 папкам с различными уровнями вложенности, на Core2Duo E7300 пробегаются за 3 секунды. И это - с выводом имён файлов и поиском по маске.
Если просто считать кол-во - будет ещё быстрее.


 
Inovet ©   (2013-03-19 15:50) [21]

> [20] Лукошко   (19.03.13 15:20)
> 10 с лишним тысяч файлов, раскиданных по порядка 150 папкам
> с различными уровнями вложенности, на Core2Duo E7300 пробегаются
> за 3 секунды.

700000 файлов, 80000 папок - 1,5 минуты. Оно же из кэша 0,5 минуты. Среди этого ещё часть  - жёсткие ссылки.


 
Дмитрий С ©   (2013-03-19 17:05) [22]

163000 файлов, 23487 папок, секунд 5


 
clickmaker ©   (2013-03-19 20:49) [23]

Удалено модератором


 
Лукошко   (2013-03-20 11:32) [24]


> Inovet ©   (19.03.13 15:50) [21]

Долго как у вас пробегает! Может, винт очень медленный?
В [20] испытания проводились на Seagate 2 Tb 7200 об/мин. Жёстких ссылок нет.


 
Inovet ©   (2013-03-20 12:00) [25]

> [24] Лукошко   (20.03.13 11:32)
> Может, винт очень медленный?

Да нормальный, но не из новых.
ST3320620AS

Вот поновее, по скорости почти такой же, но на нём файлов раз в 10 меньше
ST32000542AS

90000 файлов 4500 папок - 35 сек, из кэша 3 сек. Примерно как и на первом (системном) результаты.



Страницы: 1 вся ветка

Текущий архив: 2013.08.18;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.007 c
15-1363564783
О-Сознание
2013-03-18 03:59
2013.08.18
Цветной TProgressBar.


15-1363026996
Дмитрий С
2013-03-11 22:36
2013.08.18
Откуда гибрид берет энергию?


15-1363171562
Jeer
2013-03-13 14:46
2013.08.18
Почти парад планет в эти дни -


15-1363079964
картман
2013-03-12 13:19
2013.08.18
как пишется


2-1355323960
Иван
2012-12-12 18:52
2013.08.18
Stringgrid запись без пустых строк