Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
mx_sagat
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 100
1

Сравнение даты изменения двух файлов с использованием edit

10.12.2012, 19:44. Просмотров 2056. Ответов 11
Метки нет (Все метки)

Подскажите пожалуйста
долгое время бьюсь над способом сравнения двух одинаковых файлов.
в двух edit-ax указан путь к каталогам с файлами.
Надо сравнить файлы из одного каталога с файлами из др каталога по дате последнего изменения
и если в первом каталоге дата изм. более новая то копировать в др папку(копирование уже есть.)

Очень нужна помощь)

Добавлено через 3 минуты
пробывал fileName := 'Edit1.text+\*.*' ;
ток может я чтот не так написал но она не работает.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2012, 19:44
Ответы с готовыми решениями:

Сравнение текста из edit с текстовым файлов
Как посчитать сколько раз совпали слова введёные в edit с текстом в файле?

Сравнение двух огромных (!) файлов
Привет. Потребовалось сравнивать текстовые файлы (несколько файлов сравниваются...

Сравнение двух звуковых файлов.
Ну начну: задача стоит следующая - есть эталон звука (как я понимаю...

Сравнение двух текстовых файлов
Имеется 2 файла txt. Нужно сравнить эти файлы.Они почти идентичны, но в начале...

Сравнение двух таблиц, с разных вордовских файлов
Всем доброго времени суток, уважаемые знатоки, подскажите пожалуйста каким...

11
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
10.12.2012, 20:09 2
Написал ты, конечно, не правильно. Если хочешь добавить текст из Edit нужно писать так:
Delphi
1
fileName := Edit1.text+'\*.*' ;
Только нужно перебирать файлы в одном каталоге. Найдя какой-нибудь файл, к имени добавлять путь в другой каталог. Проверять наличие такого файла в другом каталоге. Ну а потом уже сравнивать времена изменения. У тебя уже есть наработки?
1
mx_sagat
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 100
10.12.2012, 21:54  [ТС] 3
наработки есть.
копрование.
а вот
Цитата Сообщение от Одиночка Посмотреть сообщение
Только нужно перебирать файлы в одном каталоге. Найдя какой-нибудь файл, к имени добавлять путь в другой каталог. Проверять наличие такого файла в другом каталоге. Ну а потом уже сравнивать времена изменения. У тебя уже есть наработки?
этого нет.
так как я не представляю как это сделать.
внете много чего перепробывал, но ничего.
перебирать над через while ?
0
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
10.12.2012, 22:27 4
На форуме полно тем с перебором файлов. Используется функция FindFirst и FindNext. Набери в поиске в разделе "FindFirst" и почитай.
0
mx_sagat
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 100
10.12.2012, 22:57  [ТС] 5
спасиб.
с этим я думаю разберусь а как сравнивать времена изменения файлов в каталогах по указаному в едите пути к каталогам?
0
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
10.12.2012, 23:41 6
Функция FindFirst даёт времена создания и последнего изменения найденных файлов. Там это есть в структуре переменной, в которой она выдаёт результат. В системном формате. А время последнего обновления файла из другого каталога можно получить с помощью функции: FileAge('Имя файла') тоже в системном формате или -1 - если файла не существует.

Добавлено через 26 минут

Не по теме:

Чтобы увидеть ответ - нужно обновлять страницу.


Если не получится у тебя, могу завтра с утра сделать пример.
0
mx_sagat
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 100
11.12.2012, 01:24  [ТС] 7
пробывал простенько сделать . не совсем так как надо ...
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
procedure TForm1.Button2Click(Sender: TObject);
var  OpStruc: TSHFileOpStruct;
  frombuf, tobuf: Array [0..128] of Char;
  fileName   : string;
    fileName1   : string;
   fileDate   : Integer;
      fileDate1   : Integer;
begin
 
FillChar( frombuf, Sizeof(frombuf), 0 );
  FillChar( tobuf, Sizeof(tobuf), 0 );
 
 
 
StrPCopy( frombuf, Edit1.Text+'*.txt' ); // от куда
StrPCopy( tobuf, Edit2.Text+'*.txt' ); // куда
with OpStruc do begin Wnd := Handle; wFunc := FO_COPY;
pFrom := @frombuf; pTo := @tobuf;
 // Попытка открыть файл Unit1.DCU для текущего проекта
fileName := Edit1.text+'\*.txt'  ;
fileName1 := Edit2.text+'\*.txt'  ;
   fileDate := FileAge(fileName);
   fileDate1 := FileAge(fileName1);
 
  // Мы получали возраста файла?
   if fileDate > -1 then
      if fileDate1 > -1 then
                 if filedate >filedate1 then
 
fFlags := FOF_NOCONFIRMATION or FOF_WANTMAPPINGHANDLE ; //копирует и заменяет существующие
fAnyOperationsAborted := False; hNameMappings := Nil;
lpszProgressTitle := Nil; end; ShFileOperation( OpStruc );
end;
топишет ошибку невозможно скопировать. ошибка в имени файла имени папки или имени тома.

ктонить может подсказать в чём тут ошибка?

Добавлено через 1 минуту
Цитата Сообщение от Одиночка Посмотреть сообщение
Функция FindFirst даёт времена создания и последнего изменения найденных файлов. Там это есть в структуре переменной, в которой она выдаёт результат. В системном формате. А время последнего обновления файла из другого каталога можно получить с помощью функции: FileAge('Имя файла') тоже в системном формате или -1 - если файла не существует.

Добавлено через 26 минут

Не по теме:

Чтобы увидеть ответ - нужно обновлять страницу.


Если не получится у тебя, могу завтра с утра сделать пример.
был бы очень благодарен.

Добавлено через 11 минут
ошибку нашёл и исправил.
но копирование всё равно не идёт.

Добавлено через 1 час 15 минут
сделал вроде как над ток не могу вспомнить как прервать if
так как если два одинаковых файла по дте изменения if filedate = filedate1 то ничего не делала ну прерывалась if
 Комментарий модератора 
Теги кода добавлены модератором. По правилам форума, код должен быть оформлен соответствующими тегами. Для оформления кода Delphi следует выделить этот код и на панели редактирования сообщения нажать кнопку: "DELPHI".
0
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
11.12.2012, 07:50 8
Вот, кажется так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
procedure TForm1.Button1Click(Sender: TObject);
Var
  i : Integer;
  SR : TSearchRec;
  OpStruc: TSHFileOpStruct;
  frombuf, tobuf: Array [0..128] of Char;
begin
  FillChar( tobuf, Sizeof(tobuf), 0 );
  StrPCopy( tobuf, Edit2.Text ); // куда
  with OpStruc do
  begin
    Wnd := Handle; wFunc := FO_COPY;
    pFrom := @frombuf; pTo := @tobuf;
    fFlags := FOF_NOCONFIRMATION or FOF_WANTMAPPINGHANDLE ; //копирует и заменяет существующие
    fAnyOperationsAborted := False; hNameMappings := Nil;
    lpszProgressTitle := Nil;
  End;
 
  If FindFirst(Edit1.Text+'*.*',faAnyFile,SR)=0 Then
  Repeat
    If (Sr.name='.') Or (Sr.name='..') Then Continue; //Директория
    i:=FileAge(Edit2.Text+Sr.name);
    If i<>-1 Then
    If Sr.Time>i Then
    Begin
      ShFileOperation(OpStruc);
      FillChar( frombuf, Sizeof(frombuf), 0 );
      StrPCopy( frombuf, Edit1.Text+Sr.name ); // откуда
    End;
 
    Application.ProcessMessages;
  Until FindNext(SR)<>0;
  FindClose(SR);
end;
Это должно копировать по одному файлу. Каждому найденному, если дата больше. Но, судя по описанию функции, можно сразу все имена файлов, которые нужно копировать, сложить в frombuf и они скопируются все сразу. Но у меня уже нет времени разбираться дальше.
1
mx_sagat
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 100
12.12.2012, 01:46  [ТС] 9
спасибо большое. Очень помог.)

Добавлено через 14 часов 6 минут
а что тут над записать If (Sr.name='.') Or (Sr.name='..') Then Continue; //Директория

Добавлено через 1 минуту
апробывал способ предложеный выше ошибок непоказывает но не копирует вообще ничего.

Добавлено через 1 минуту
0
Одиночка
12.12.2012, 08:52
  #10

Не по теме:

Утром не смог - вечером проверю.

0
DaMortum
244 / 147 / 31
Регистрация: 07.10.2012
Сообщений: 401
12.12.2012, 11:58 11
Есть одна ошибочка. Нужно сначала заполнять frombuf а затем вызывать ShFileOperation(OpStruc);.

Цитата Сообщение от mx_sagat Посмотреть сообщение
не копирует вообще ничего.
Копирует только если в папке назначения находит одноимённый копируемому файл старше по дате.
Если нужно при отсутствии одноимённого файла в папке назначения скопировать файл, то убираем эту строчку If i<>-1 Then
1
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
12.12.2012, 18:54 12
mx_sagat: В общем DaMortum нашел ошибки (читай предыдущий пост). И замени строки 23-29 на:
Delphi
1
2
3
4
5
6
7
    If i<>-1 Then //Эту строку можно убрать (тогда будет копировать если в приёмной директории такого файла нет вообще)
    If Sr.Time>i Then
    Begin
      FillChar( frombuf, Sizeof(frombuf), 0 );
      StrPCopy( frombuf, Edit1.Text+Sr.name ); // откуда
      ShFileOperation(OpStruc);
    End;
0
12.12.2012, 18:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2012, 18:54

Получение размера, даты создания, даты последнего доступа файлов
Прошу помощи. С помощью каких фунций / процедур можно получить размер, дату...

Запись даты в edit
Всем привет есть такой вопрос.Как сделать так чтобы я ввёл в эдит 12032016 а ...

Вставка даты в Edit
Как сделать так, чтоб при выборе даты из MonthCalendar1 дата добавлялась в edit...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru