Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.061 c
1-1168796153
SergV
2007-01-14 20:35
2007.03.04
Определить имя компонента


15-1171034206
oldman
2007-02-09 18:16
2007.03.04
Пожалуй повторюсь, а то ветка так и затерялась без единого ответа


15-1170615438
DrPass
2007-02-04 21:57
2007.03.04
Илья Кормильцев умер :(


2-1170420844
daser
2007-02-02 15:54
2007.03.04
Как по двойному щелчку по записи в гриде, зменить цвет шрифта ...


2-1171526671
vitv
2007-02-15 11:04
2007.03.04
Проблема выборки большого числа записей(100 000).