Что нового

Сравнение файлов по времени последнего изменения

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
Я думал - банальный вопрос... :smile:
Однако когда впился пальцами в клавиатуру - не смог составить этюд, который бы вычислял, какой из двух файлов был изменен позже...

Мне кажется, проверка условия на пятом уровне вложенности - не лучшее решение...
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
Код:
$file1 = 'path1'
$file1 = 'path2'
$aTime1 = FileGetTime($file1)
$aTime2 = FileGetTime($file2)
$sTime1 = $aTime1[0] & '/' & $aTime1[1] & '/' & $aTime1[2] & ' ' & $aTime1[3] & ':' & $aTime1[4] & ':' $aTime1[5]
$sTime2 = $aTime2[0] & '/' & $aTime2[1] & '/' & $aTime2[2] & ' ' & $aTime2[3] & ':' & $aTime2[4] & ':' $aTime2[5]
If _DateDiff('s', $sTime1, $sTime2) > 0 Then
	MsgBox(0, '', $file1 & ' is older than ' & $file2)
ElseIf _DateDiff('s', $sTime1, $sTime2) > 0 Then
	MsgBox(0, '', 'Files were modified simultaneously')
Else
	MsgBox(0, '', $file2 & ' is older than ' & $file1)
EndIf
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,665
Репутация
2,463
Код:
$sFile1 = @DesktopDir & "\file1.txt"
$sFile2 = @DesktopDir & "\file2.txt"

$sFileTime1 = FileGetTime($sFile1, 0, 1)
$sFileTime2 = FileGetTime($sFile2, 0, 1)

If $sFileTime1 > $sFileTime2 Then
	$sFile = StringRegExpReplace($sFile1, "^.*\\", "")
Else
	$sFile = StringRegExpReplace($sFile2, "^.*\\", "")
EndIf

MsgBox(64, 'Title', 'Файл <' & $sFile & '> изменён позже.')



Добавлено:
Сообщение автоматически объединено:

Kaster
Тот же способ без массивов:

Код:
#include <Date.au3>

$sFile1 = @DesktopDir & "\file1.txt"
$sFile2 = @DesktopDir & "\file2.txt"

$sDateDiff_Pattern = "(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})"

$sFileTime1 = StringRegExpReplace(FileGetTime($sFile1, 0, 1), $sDateDiff_Pattern, "\1/\2/\3 \4:\5:\6")
$sFileTime2 = StringRegExpReplace(FileGetTime($sFile2, 0, 1), $sDateDiff_Pattern, "\1/\2/\3 \4:\5:\6")

If _DateDiff("s", $sFileTime1, $sFileTime2) > 0 Then
	$sFile = $sFile2
	$sFileTime = $sFileTime2
Else
	$sFile = $sFile1
	$sFileTime = $sFileTime1
EndIf

MsgBox(64, 'Title', 'Файл <' & StringRegExpReplace($sFile, "^.*\\", "") & '> изменён позже (' & $sFileTime & ').')
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
Скрипт, который предложил Kaster, заставил немного помучиться, так как содержал трудно вычисляемую орфографическую ошибку... :smile:
Однако смысл ясен...
Скрипты, которые предложил CreatoR, заработали сразу, но дали противоположные результаты...
Результат второго скрипта совпал с результатом скрипта, предложенного Kaster...
В этой связи хотелось бы уточнить:
Если FileGetTime() от первого файла больше, чем от второго, то какой файл изменен позже?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
snoitaleR
Извиняюсь. Поспешишь - людей насмешишь :-[
Рад, что поправил. Но на всяк случай,
Код:
#include <Date.au3>
$file1 = 'path1'
$file2 = 'path2'
$aTime1 = FileGetTime($file1)
$aTime2 = FileGetTime($file2)
$sTime1 = $aTime1[0] & '/' & $aTime1[1] & '/' & $aTime1[2] & ' ' & $aTime1[3] & ':' & $aTime1[4] & ':' & $aTime1[5]
$sTime2 = $aTime2[0] & '/' & $aTime2[1] & '/' & $aTime2[2] & ' ' & $aTime2[3] & ':' & $aTime2[4] & ':' & $aTime2[5]
If _DateDiff('s', $sTime1, $sTime2) > 0 Then
    MsgBox(0, '', $file1 & ' is older than ' & $file2)
ElseIf _DateDiff('s', $sTime1, $sTime2) = 0 Then
    MsgBox(0, '', 'Files were modified simultaneously')
Else
    MsgBox(0, '', $file2 & ' is older than ' & $file1)
EndIf

PS: на самом деле ошибка была не одна, а аж целых 3


Добавлено:
Сообщение автоматически объединено:

тот который раньше модифицировался имеет меньшее значение FileGetTime()
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,665
Репутация
2,463
snoitaleR [?]
Если FileGetTime() от первого файла больше, чем от второго, то какой файл изменен позже?
Естественно первый, т.к дата более поздняя :smile:

Kaster [?]
Код:
If _DateDiff('s', $sTime1, $sTime2) > 0 Then
    MsgBox(0, '', $file1 & ' is older than ' & $file2)
ElseIf _DateDiff('s', $sTime1, $sTime2) > 0 Then
Интересно, тут два идентичных(?) сравнения, второе никогда не будет выполнено, отсюда возмущение - для чего оно? :D
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
CreatoR
Разобрался, почему два твоих скрипта давали противоположные результаты: два моих файла имели одно и то же время последнего изменения... :smile:
Но это не главное... Главное - то, что на это было обращено внимание...

Kaster
Я долго искал потерянный "&"... :smile:
На остальные ошибки даже внимания не обратил...



Добавлено:
Сообщение автоматически объединено:

Может Kaster хотел рассмотреть вариант равенства времен, но ошибся знаком?


Добавлено:
Сообщение автоматически объединено:

Для меня неясных вещей не осталось...
Благодарю за помощь... :smile:
Тему помечаю решенной...
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
snoitaleR [?]
Может Kaster хотел рассмотреть вариант равенства времен, но ошибся знаком?
именно ;)
а вообще, никогда больше не буду писать скрипт сразу на форуме :laugh:
сначала проверю на своей машине, а потом уже постить 8)
 
Верх