Что нового

Проверка на существование файлов и папок

Nordik

Новичок
Сообщения
4
Репутация
0
Не ругайте сильно я новичек в этом деле.
Пишу скрипт на проверку бекапов с исходником (пока только по дате создания)
Скрипт все проверяет сравнивает создает лог файл
Но если в одной из нет одного файла который есть в другой папке то прога вылетает, пытался провервку всунуть FileExist так и не смог (хотелось бы чтобы он проверял на наличие файла и если нет такого то заносить в лог инфу что в такой то папке нет такого то файла)

Код:
#include <Date.au3>
 $search = FileFindFirstFile("*.*")  
  While 1
 
$file = FileFindNextFile($search) 
$1 = $CmdLine[1]
$2 = $CmdLine[2]  ;путь ко второй папке   
$root1 = 'otchet'
if @error  Then ExitLoop
     $path1 = $1 & '\' & $file
     $path2 = $2 & '\' & $file   

;If	FileExists($path1) Then 
         $aTime1 = FileGetTime($path1)
         $aTime2 = FileGetTime($path2)
		 $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, '', $path1 & ' Создан раньше чем ' & $path2)
		     	 $filetxt1 = FileOpen(@ScriptDir & '\' & $root1 & '_отл.txt', 1)
	             FileWriteLine($filetxt1, $path1 & ' Создан раньше чем ' & $path2 &@CRLF)
   
	    	ElseIf _DateDiff('s', $sTime1, $sTime2) = 0 Then
                 ; MsgBox(0, '', 'Они одинаковы')
	             $filetxt1 = FileOpen(@ScriptDir & '\' & $root1 & '_схож.txt', 1)
				FileWriteLine($filetxt1, $path1 & ' создан также ' & $sTime1 & ' как и ' & $path2 & @CRLF)
            Else
                 ; MsgBox(0, '', $path2 & ' Создан раньше чем ' & $path1)
			     $filetxt1 = FileOpen(@ScriptDir & '\' & $root1 & '_отл.txt', 1)
	             FileWriteLine($filetxt1, $path2 & ' Создан раньше чем ' & $path1 &@CRLF)
			EndIf	

WEnd


Кто может подскажет куда надо вписать FileExist
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
У Вас верный ход мысли - закомментированную строчку надо изменить на:
Код:
Если нет файла по адресу $path1 или нет файла по адресу $path2, то выйти из цикла.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,665
Репутация
2,463
Nordik [?]
если в одной из нет одного файла который есть в другой папке то прога вылетает
Значит неправильно составлен код. Нужно проверять код ошибки у любых фукнций, которые возвращают массивы.

Код:
#include <Date.au3>

If $CmdLine[0] = 0 Then
	Exit ;Иначе тоже будет ошибка при неверном количестве переданных параметров
EndIf

$1 = $CmdLine[1]
$2 = $CmdLine[2] ;путь ко второй папке

$search = FileFindFirstFile("*.*")

While 1
	$file = FileFindNextFile($search)
	
	If @error Then
		ExitLoop
	EndIf
	
	$root1 = 'otchet'
	
	$path1 = $1 & '\' & $file
	$path2 = $2 & '\' & $file
	
	$aTime1 = FileGetTime($path1)
	$aTime2 = FileGetTime($path2)
	
	If Not IsArray($aTime1) Or Not IsArray($aTime2) Then
		ContinueLoop
	EndIf
	
	$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, '', $path1 & ' Создан раньше чем ' & $path2)
		FileWriteLine(@ScriptDir & '\' & $root1 & '_отл.txt', $path1 & ' Создан раньше чем ' & $path2 & @CRLF)
	ElseIf _DateDiff('s', $sTime1, $sTime2) = 0 Then
		; MsgBox(0, '', 'Они одинаковы')
		FileWriteLine(@ScriptDir & '\' & $root1 & '_схож.txt', $path1 & ' создан также ' & $sTime1 & ' как и ' & $path2 & @CRLF)
	Else
		; MsgBox(0, '', $path2 & ' Создан раньше чем ' & $path1)
		FileWriteLine(@ScriptDir & '\' & $root1 & '_отл.txt', $path2 & ' Создан раньше чем ' & $path1 & @CRLF)
	EndIf
WEnd
 
Автор
N

Nordik

Новичок
Сообщения
4
Репутация
0
CreatoR сказал(а):
Nordik [?]
если в одной из нет одного файла который есть в другой папке то прога вылетает
Значит неправильно составлен код. Нужно проверять код ошибки у любых фукнций, которые возвращают массивы.
Спасибо за совет все работает.
Код:
If Not IsArray($aTime1) Or Not IsArray($aTime2) Then
        ContinueLoop
    EndIf


Я прально понял, это и есть проверка на существование файлов т.к все работает сейчас. Т.е тут идет проверка переменной на принадлежность к массиву.

А как тогда сделать что бы записывало в лог файл каких файлов нет в первой папке по сравнению со второй ?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,665
Репутация
2,463
Nordik [?]
это и есть проверка на существование файлов
Нет, это проверка на то, являются ли массивами переменные «$aTime1» и «$aTime2», в данном случае это избавляет от необходимости поверять существование файлов, мы как бы убиваем два зайца, т.к проверку на ошибочность функций FileGetTime всё равно нужно выполнять.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,665
Репутация
2,463
Nordik [?]
А как тогда сделать что бы записывало в лог файл каких файлов нет в первой папке по сравнению со второй ?
Не понял, что значит по сравнению?
 
Автор
N

Nordik

Новичок
Сообщения
4
Репутация
0
CreatoR сказал(а):
Nordik [?]
А как тогда сделать что бы записывало в лог файл каких файлов нет в первой папке по сравнению со второй ?
Не понял, что значит по сравнению?
Есть папка с бекапом и его копией я их сравниваю по времени и дате создания. Мне необходимо, если какого то файла нет в копии бекапа, чтобы об этом была занесена информация в лог файл.
 
Верх