Текущий архив: 2007.03.04;
Скачать: CL | DM;
Вниз
копирование файлов... Найти похожие ветки
← →
vasIZmax © (2007-02-11 19:21) [0]Вот никак не получается. Смысл такой: мне надо из папки_1 скопировать файлы в папку_2, но если файл из папки_1 есть в списке (список файлов которые не надо копировать), то этот файл пропускаем.
Список загружаю в листобокс(для наглядности, так легче).
Но вот проблема, копирует все даже файлы которые в "чс". Подскажите, как их не копирить.
Код вот такой:reser:=0;
if FindFirst(form1.DirectoryListBox1.Directory+"\*.*",faAnyFile,f)=0 then
begin
while FindNext(f)=0 do
for i:=0 to form1.ListBox1.Count-1 do
begin
if f.Name=form1.ListBox1.Items.Strings[i] then
break
else
reser:=1;
end;
if reser=1 then
forcopy
else
memo1.Lines.Add(f.Name);
end;
reser:=0;
end;
ЗЫ. чг, не могу понять...
← →
Vendict © (2007-02-11 19:51) [1]vasIZmax © (11.02.07 19:21)
ЗЫ. чг, не могу понять...
чёт я тоже втвоём коде ничего понять не могу...
во первых, куда протеряли первый файл ? (после FindFirst сразу делаешь FindNext в While)
во-вторых, что происходит в цикле for ? если имя 1го файл из списка не равно текущему файлу, тоreser:=1;
и теперь хоть вызывай break, хоть не вызывай,reser=1
и файл скопируется. я предлагаю сделать так:if FindFirst(form1.DirectoryListBox1.Directory+"\*.*",faAnyFile,f)=0 then
begin
while FindNext(f)=0 do
for i:=0 to form1.ListBox1.Count-1 do
if f.Name=form1.ListBox1.Items.Strings[i] then break
if i=form1.ListBox1.Count then forcopy
else memo1.Lines.Add(f.Name);
end;
← →
Vendict © (2007-02-11 19:52) [2]
i=form1.ListBox1.Count
забыл объяснить, условие выполнится, если цикл дойдёт до конца без выполненияbreak
, т.е. если файл не будет найден в списке.
← →
Vendict © (2007-02-11 19:54) [3]да, и забыл учесть своё же первое замечание, вот что должно получится:
if FindFirst(form1.DirectoryListBox1.Directory+"\*.*",faAnyFile,f)=0 then
begin
repeat
for i:=0 to form1.ListBox1.Count-1 do
if f.Name=form1.ListBox1.Items.Strings[i] then break;
until FindNext(f)<>0;
if i=form1.ListBox1.Count then forcopy
else memo1.Lines.Add(f.Name);
end;
← →
DrPass © (2007-02-11 19:57) [4]
> for i:=0 to form1.ListBox1.Count-1 do
> if f.Name=form1.ListBox1.Items.Strings[i] then break
> if i=form1.ListBox1.Count then forcopy
Вообще-то значение счетчика цикла неопределено после выхода из него
← →
Knight © (2007-02-11 20:00) [5]Почему бы цикл не заменить на Form1.ListBox1.Items.IndexOf(...)>-1....
← →
DrPass © (2007-02-11 20:00) [6]if FindFirst(form1.DirectoryListBox1.Directory+"\*.*",faAnyFile,f)=0 then
repeat
if form1.ListBox1.Items.IndexOf(f.Name)<0 then forcopy
else memo1.Lines.Add(f.Name);
until FindNext(f)<>0;
← →
Knight © (2007-02-11 20:04) [7]... ещё рекурсию на поддириктории... и всё будет путём :)
← →
vasIZmax © (2007-02-11 20:28) [8]Спасибо всем. помогло. и че я сразу тупил:))) выручили:))
← →
Vendict © (2007-02-11 20:55) [9]DrPass © (11.02.07 19:57) [4]
Вообще-то значение счетчика цикла неопределено после выхода из него
может быть эта одна из недокументированых вещей...
у меня (может из-за того, чтопо умолчанию оптимизатор выключен) значение счётчика принимает n+1 если цикл был до n (например)
← →
Джо © (2007-02-12 04:28) [10]
> [9] Vendict © (11.02.07 20:55)
> может быть эта одна из недокументированых вещей...
Очень даже документированная. См. раздел справки "For statements":
After the for statement terminates, the value of counter is undefined.
Страницы: 1 вся ветка
Текущий архив: 2007.03.04;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.031 c