Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.04.2013, 00:38
Sagat Sagat вне форума
Прохожий
 
Регистрация: 20.04.2013
Сообщения: 4
Версия Delphi: Delphi 7
Репутация: 10
Печаль Поочерёдное копирование файлов с условием через Copyfile

Подскажите пожалуйста
в чём ошибка в коде.
так как он прост копирует тупо всё и условие не смотрит

Код:
  if FindFirst(Edit1.text+'\*.*', faAnyFile, searchResult) = 0 then
repeat
if fileDate > -1 then
      if fileDate1 > -1 then
                 if filedate >filedate1
                 then
 CopyFile(Pchar(Edit1.Text+'\'+searchResult.Name), Pchar(Edit2.Text+'\'+searchResult.Name),true)


Последний раз редактировалось lmikle, 20.04.2013 в 02:29.
Ответить с цитированием
  #2  
Старый 20.04.2013, 00:40
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

И что такое fileDate, fileDate1? Где они инициализируются?
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 20.04.2013, 01:05
Sagat Sagat вне форума
Прохожий
 
Регистрация: 20.04.2013
Сообщения: 4
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

весь код
Код:
Var
fileDate: Integer;
      fileDate1   : Integer;

         searchResult : TSearchRec;
   frombuf, tobuf: Array [0..128] of Char;
  fileName   : string;
  SR : TSearchRec;

 S,a:String ;

begin


   if FindFirst(Edit1.text+'\*.*', faAnyFile, searchResult) = 0 then
repeat
if fileDate > -1 then
      if fileDate1 > -1 then
                 if filedate >filedate1
                 then
 CopyFile(Pchar(Edit1.Text+'\'+searchResult.Name), Pchar(Edit2.Text+'\'+searchResult.Name),true)
 

        
                
    until FindNext(searchResult) <> 0;
    FindClose(searchResult);

lmikle: Последнее китайское предупреждение. Быстро учимся оформлять посты (использовать правильные теги)!

Последний раз редактировалось lmikle, 20.04.2013 в 02:30.
Ответить с цитированием
  #4  
Старый 20.04.2013, 02:01
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Если это весь код то:
Если переменные fileDate, fileDate1 глобальные - в них при запуске программы 0, если локальные - мусор. С какого перепугу сравнивается с -1?... Над этим и задумайся.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 20.04.2013, 03:00
Sagat Sagat вне форума
Прохожий
 
Регистрация: 20.04.2013
Сообщения: 4
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

я давно уже над этим кодом сижу сам уже запутался.
но только вот мне всё равно нужна помощь.
Подскажите кто-нибудь ка сделать чтобы соблюдалось условие.
Ответить с цитированием
  #6  
Старый 20.04.2013, 08:45
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Sagat
...ка сделать чтобы соблюдалось условие.
Оно и соблюдается
Код:
...

if (FileDate > -1) and (FileDate1 > -1) and (FileDate > FileDate1) then
 CopyFile(Pchar(Edit1.Text + '\'+SearchResult.Name),
 Pchar(Edit2.Text + '\' + SearchResult.Name), true);

...
Ответить с цитированием
  #7  
Старый 21.04.2013, 12:41
Sagat Sagat вне форума
Прохожий
 
Регистрация: 20.04.2013
Сообщения: 4
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

вопрос в том
как сделать что бы сравнивала файлы по очереди и копировала те на пример которых время последнего изменения больше.
а если время одинаково то переходила к сл.
Ответить с цитированием
  #8  
Старый 21.04.2013, 16:11
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
копировала те на пример которых время последнего изменения больше.
Больше чего?
Допустим, есть 5 файлов. A,B,C,D,E. Их время изменения - 2 у.е., 3, 1, 5, 4 соответственно. Берем файл A. У файлов B, D, E время больше. Копируем их. Берем файл B. У файлов D,E время больше, копируем их. Берем C, у всех время больше, копируем все. Берем файл D, у E время больше, копируем его. Таким образом, будут скопированы все файлы, кроме того, у кого время наименьшее, более того - многие будут скопированы много раз. Сомневаюсь, что требуется именно это.
Что конкретно надо-то?
Цитата:
а если время одинаково то переходила к сл.
Что, прям совсем одинаковое? Вплоть до наносекунд? Удивлюсь, если найдешь много таких файлов (не синтетически сделанных всякой малварей для сокрытия в системе).
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #9  
Старый 21.04.2013, 17:55
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Sagat
...как сделать что бы сравнивала файлы по очереди и копировала те на пример которых время последнего изменения больше.
а если время одинаково то переходила к сл.
1:
Код:
//searchResult.Time {integer}

if DateFile < searchResult.Time then ...
2: (дата последнего изменения файла)
Код:
function GetFileDate(FileName: string): TDateTime;
var FHandle: Integer; 
begin 
FHandle:= FileOpen(FileName, 0); 
try 
Result:= FileDateToDateTime(FileGetDate(FHandle)); 
finally 
FileClose(FHandle); 
end;
end;
Последняя функция очень долго работает т.к. открывается каждый раз файл и если он занят другим потоком, это может привести к AV.
Ответить с цитированием
  #10  
Старый 29.04.2013, 21:14
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Чтобы проверить FileDate, файл открывать не надо.
Код:
if FileAge(Edit1.Text+'\'+searchResult.Name) >  FileAge(Edit2.Text+'\'+searchResult.Name) then
 CopyFile(Pchar(Edit1.Text+'\'+searchResult.Name), Pchar(Edit2.Text+'\'+searchResult.Name),true)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:34.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter