Текущий архив: 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