0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 100
1

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

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

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

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

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

Сравнение даты даты изменения файлов
Привет. Написал кусок проги для сравнения даты изменения файлов: #include "stdafx.h" #include...

Сравнение даты изменения 2-ух файлов с перемещением нового в другую папку
Здравствуйте, есть cmd скрипт который закачивает файлы из интернета через wget, затем копирует в...

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

Сравнение даты из двух gridView
Здравствуйте. Есть два Gridview: в первом(datagridview1) есть два столбца с...

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

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

Не по теме:

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


Если не получится у тебя, могу завтра с утра сделать пример.
0
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
3943 / 1868 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
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
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
249 / 153 / 31
Регистрация: 07.10.2012
Сообщений: 401
12.12.2012, 11:58 11
Есть одна ошибочка. Нужно сначала заполнять frombuf а затем вызывать ShFileOperation(OpStruc);.

Цитата Сообщение от mx_sagat Посмотреть сообщение
не копирует вообще ничего.
Копирует только если в папке назначения находит одноимённый копируемому файл старше по дате.
Если нужно при отсутствии одноимённого файла в папке назначения скопировать файл, то убираем эту строчку If i<>-1 Then
1
3943 / 1868 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2012, 18:54
Помогаю со студенческими работами здесь

Сравнение двух отчетов S.M.A.R.T. на предмет изменения атрибутов
Имеется два текстовых файла. Надо сравнить их оба по определённой строке, номер этой строки не знаю...

Сравнение всех файлов в каталогах по дате последнего изменения
мне нужно проверить все файлы по именам если они совпадают то проверить последнюю дату изменения и...

Получить список файлов и узнать даты их изменения в известном каталоге?
вот, собственно, и весь вопрос :)

Сравнение двух файлов.
Привет всем. В БАТ тольуо учусь, сильно не пинайте. В общем, задача такая: 1 текстовый файл...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru