Что нового

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

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 166
Репутация
2 331
Код:
$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 166
Репутация
2 331
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)
 
Верх