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

Вниз

Работа с файлами...   Найти похожие ветки 

 
nk ©   (2005-08-24 09:24) [0]

День добрый, подскажите пож., как нужно сделать чтоб работало быстрее...
Задача: копирование одноко каталога (со всеми вложеними) в другой (с сохранением относительных путей)... делаю через findfirst/findnext/findclose + copyfile + creatdirectory... все работает, но как-то непонятно... исходный каталог весит порядка 555mb и наполнен кучей мелких (и не очень) файлов, примерно на 31% начинаются тормоза... копироание продолжается, но скорость копирования падает дико (примерно 15-20 сек. - 1mb)...
В связи с этим вопрос: это у меня глюки в коде, или сочетание этих функций всегда ведет к таким результатам... ? ! ))
В общем, подскажите пож. кто чем пользуется (функции) в подобных ситуациях ? ! ))
Зарание пасиба !


 
Holy ©   (2005-08-24 09:41) [1]

А код покажешь?


 
nk ©   (2005-08-24 10:06) [2]

to Holy ©   (24.08.05 09:41) [1] - код дома, там нет ни инета, ни флопа, ни т.д.
...по памяти - примерно так:

function CopyDir(from,where:string):boolean; //from - откуда, заканчивается "\*.*", where - соответственно - куда...
var f:TSearchRec;
begin
findfirst(from,attr,f); //attr = faAnyFile
repeat
if f.attr<>fadirectory then copyfile(PChar(copy(from,1,length(from)-3)+f.name),PChar(copy(where,1,length(where)-3)+f.name));
else
if f.name<>"." and f.name<>".." then
  begin
   createdirectory(PChar(copy(where,1,length(where)-3)+f.name),0);
   copydir(copy(from,1,length(from)-3)+f.name,copy(where,1,length(where)-3)+f.name);
  end;
until findnext(f)<>0;
findclose(f)
end;

вроде - так... ))


 
nk ©   (2005-08-24 10:12) [3]

... забыл, еще перед copyfile и creatdirectory стоит application.ProcessMesseges, и в copyfiles третим аргументом стои true... ну это - если интересно... ! )))


 
nk ©   (2005-08-24 10:49) [4]

... все ушли на фронт ? !! )))
лана, попробую сформулировать вопрос по другому: кто какие функции для копирования файлов/каталогов посоветует ? ! ))


 
begin...end ©   (2005-08-24 14:23) [5]

> nk ©   (24.08.05 10:49) [4]

> какие функции для копирования файлов/каталогов посоветует ? !

Для копирования каталогов посоветую функцию SHFileOperation из модуля ShellAPI (её описание можно найти в справке по API или в MSDN). Скопирует, переместит, удалит целый каталог без лишних телодвижений.


 
Anatoly Podgoretsky ©   (2005-08-24 20:47) [6]

begin...end ©   (24.08.05 14:23) [5]
И с должной скоростью


 
nk ©   (2005-08-25 10:37) [7]

to begin...end ©   (24.08.05 14:23) [5] - Пасиба - пробую... )


 
nk ©   (2005-08-25 11:40) [8]

... не, я понимаю канечна - ошибки в ДНК так просто не исправляются, но это Ж уже не смешно !!!
Набил "примитив" с использованием SHFileOperation... копирет, но результат тотже... !
ситуация: есть база 1С, с ней работают люди, паралельно хочу копировать эту базу в др. место, и там уже реиндексировать/архивировать/прочь., wincmd копирует ее в течении 1-2мин... "примитив" старается уже в течении 5-ти минут, и судя по прогрессбру - прошел процентов 75... !
... кто-нить может подсказать в чем может быть дело (кроме моего ДНК и не переходя на личности) ? !!!
Зарание пасиба... ! )
PS процесс копирования в обоих случаях (с использованием CopyFile и с использованием SHFileOperation) отрабатывается до конца... и с одинаковой скоростью... !


 
Плохиш ©   (2005-08-25 11:51) [9]

Ошибка в 17й строке


 
Anatoly Podgoretsky ©   (2005-08-25 11:52) [10]

nk ©   (25.08.05 11:40) [8]
Ты это серьезно "есть база 1С, с ней работают люди, паралельно хочу копировать эту базу в др. место"?
ДНК не буду трогать, но ты задумайся над этим


 
nk ©   (2005-08-25 12:00) [11]

to Anatoly Podgoretsky ©   (25.08.05 11:52) [10] - лана, в данном конкретном случае - даже не обижусь - можете рассказать мне и про ДНК, только обьясните при этом - а в чем проблема ?!
Истче раз ситуация: есть база 1С, с ней работают люди, я её копирую в др. место... - на данном этапе - в чем проблема ? !! - честно - непойму! )


 
nk ©   (2005-08-25 12:08) [12]

to Плохиш ©   (25.08.05 11:51) [9] - так лучьше ?))


procedure TForm1.Button1Click(Sender: TObject);
var s:string;
 All:_SHFileOpStructa;
begin
all.Wnd:=CreateDialog(form1.Handle,"",form1.Handle,nil);
all.wFunc:=FO_COPY;
all.pFrom:=PChar("\\192.168.101.15\1C_DataBase\MF_Work");
all.pTo:=PChar("d:\nk\temp\where");
all.fFlags:=FOF_SIMPLEPROGRESS;
all.fAnyOperationsAborted:=true;
all.lpszProgressTitle:=PChar(s);
if SHFileOperation(all)=0 then showmessage("Ok")
   else showmessage("Here is so always... ! ((");
end;


процентов до 31-37 все идет нормально, потом начинаются тормоза, скорость копирования дико падает...
ещё раз to Anatoly Podgoretsky © - серьезно - в чем проблема-то, окромя моих "талантов" ? !! )))


 
Leonid Troyanovsky ©   (2005-08-25 13:12) [13]


> nk ©   (25.08.05 12:00) [11]

> Истче раз ситуация: есть база 1С, с ней работают люди, я
> её копирую в др. место... - на данном этапе - в чем проблема
> ? !! - честно - непойму! )


Представим, что милиционер пишет на тебя протокол,
а ты вырываешь у него из рук, дабы его отксерокопировать.
Как ты думаешь, чем это закончится?

RTFM: File replication service.

--
Regards, LVT.


 
nk ©   (2005-08-25 13:19) [14]

to Leonid Troyanovsky ©   (25.08.05 13:12) [13] - ... тода встречный глупый вопрос, а как wincmd с этой проблемой справляется... причем без всяких проблем ? !! ))
да и мой "пимитивы" - тормозить - тормозят, но работают... ?


 
Плохиш ©   (2005-08-25 13:32) [15]


> nk ©   (25.08.05 13:19) [14]

Только что проверил, 400 Мб, TC и твой пример скопировали за одинаковое время. Т.ч. или система или сеть.


 
Leonid Troyanovsky ©   (2005-08-25 13:49) [16]


> nk ©   (25.08.05 13:19) [14]

> встречный глупый вопрос, а как wincmd с этой проблемой справляется...
> причем без всяких проблем ? !! ))
> да и мой "пимитивы" - тормозить - тормозят, но работают...
> ?


Это только кажется, что без проблем.
Т.е., данные которые скопированы, могут быть несогласованы,
нецелостны и т.д. и т.п.

Копировать файлы имеет смысл лишь когда они
либо все закрыты, либо открыты лишь на чтение.

--
Regards, LVT.


 
nk ©   (2005-08-25 14:03) [17]

to Плохиш ©   (25.08.05 13:32) [15] - пасиба за диагностику... )
to Leonid Troyanovsky ©   (25.08.05 13:49) [16] - тобишь, в течении рабочего дня (когда обычно и возникают всякие глюки) - копировать и бэкапить базу у меня не получится (не повыгоняв перед этим пользователей из 1С-ки) ?! ))
... обидно как-то... ! )


 
Leonid Troyanovsky ©   (2005-08-25 14:40) [18]


> to Leonid Troyanovsky ©   (25.08.05 13:49) [16] - тобишь,
> в течении рабочего дня (когда обычно и возникают всякие
> глюки) - копировать и бэкапить базу у меня не получится
> (не повыгоняв перед этим пользователей из 1С-ки) ?! ))


Когда начинаются глюки, тогда уже поздно.
Т.е., например, возрос трафик.
А тут вылезаешь ты, со своим копированием.

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

--
Regards, LVT.

ЗЫ Да и, вообще, сейчас даже 1с делают на MSSQL.


 
Anatoly Podgoretsky ©   (2005-08-25 15:15) [19]

nk ©   (25.08.05 12:08) [12]
Вообще то это не работоспособный код, иногда будет работать иногда нет, поскольку не выполнены требования к полям pFrom и pTo, смотри справку это не имя файла, а список с разделителями и ограничителем, у тебя ограничителя нет.



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

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

Наверх




Память: 0.52 MB
Время: 0.033 c
4-1123558457
Rentgen
2005-08-09 07:34
2005.10.02
Как скрыть у DBGrid а ScrollBar ы навсегда?


3-1124450354
RusLAN_
2005-08-19 15:19
2005.10.02
FireBird 1.5 . Не работает Upper .


4-1123341088
Pasha L
2005-08-06 19:11
2005.10.02
Отследить закрытие, осуществляемое через end process


6-1118184509
Макс Т.
2005-06-08 02:48
2005.10.02
Получение странички БЕЗ каких-либо VCL компонентов


1-1126561026
lauren
2005-09-13 01:37
2005.10.02
bold button