Что нового

Определить, за какие даты есть файлы в папке

srg777

Новичок
Сообщения
21
Репутация
1
Версия AutoIt: 3.

Описание:
Всем здрасьте!
В одну из моих папок ежедневно записываются файлы. В конце месяца я их архивирую в один архив.
Но перед архивацией я хотел бы еще проверять, за какие даты файлы есть, а за какие даты файлы отсутствуют.
Соответственно, если файлы есть по каждому дню в данном месяце, то происходит архивация. А если какие-то дни выпали и в эти дни файлы не создавались, то мне отправляется на почту сообщение о выпавших днях и я уже сам проверяю и вручную архивирую, когда разберусь.
Дату файла можно определить по дате изменения файла и взять из названия (что проще, я не знаю), так как формат названия такой: ФАЙЛ_2014_07_29.

Прошу помочь, как в переменной записать те даты текущего месяца, за который файлы есть или нет. Как отыскать эти файлы?

Заранее всем спасибо!

Примечания:
 

Booster

Новичок
Сообщения
48
Репутация
1
Если в точности как Вы просите то возможно реализовать так:
Код:
#include <Array.au3>
dim $ListDate[32]
$FileHandle=FileFindFirstFile (@ScriptDir&'\*.jpg') ;-- Здесь за место *.jpg ставим расширение Ваших файлов.

While 1

$FileList=FileFindNextFile ($FileHandle)
if @error=1 then ExitLoop
$FileDate=FileGetTime ($FileList,1,0)
$ListDate[$FileDate[2]]=$FileDate[2]
if $FileDate[1]<>@MON then $ListDate[$FileDate[2]]=''

WEnd

_ArrayDisplay ($ListDate,'Test')


Порядковый номер дня месяца соответствует № ячейки массива $ListDate т.е. 1 день = $ListDate[1], 2 день = $ListDate[2] и т.д. В итоге у нас в массив $ListDate[] будут записаны даты имеющихся файлов за текущий месяц, пустые ячейки массива будут как раз означать, что файлов с № дня соответствующих № ячейки массива в папке нет.
Данный вариант решения будет выдавать результат исключительно для текущего месяца, т.е. если месяц создания файла будет иным от текущего, массив $ListDate[] будет всегда пустым, даже при наличии файлов в папке. Вообще подача может быть иной и не обязательно использование массива $ListDate[32] все зависит от того как в итоге будем работать с полученными данными в массиве $FileDate[].
 
Автор
S

srg777

Новичок
Сообщения
21
Репутация
1
В принципе такой вариант меня устроит. Можно ли добавить к нему еще и количество файлов за определенный день. Тогда в общем-то задача для меня была бы решена.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
srg777 [?]
за какие даты файлы есть, а за какие даты файлы отсутствуют
формат названия такой: ФАЙЛ_2014_07_29
Код:
#include <Array.au3>
#include <Date.au3>

Local $iDays = _DateDaysInMonth(@YEAR, @MON)
Local $aFileList[$iDays+1][2]
Local $sSMS = ''

For $i = 1 To UBound($aFileList)-1
   $sFileName = StringFormat('ФАЙЛ_%.04d_%.02d_%.02d.txt', @YEAR, @MON, $i)
   If Not FileExists($sFileName) Then
	  $aFileList[$i][0] = $sFileName
	  $aFileList[$i][1] = 'error'
   Else
	  $aFileList[$i][0] = $sFileName
	  $aFileList[$i][1] = 'ok'
	  $aFileList[0][0] += 1
   EndIf
Next

;_ArrayDisplay ($aFileList)

If $iDays <> $aFileList[0][0] Then
   For $i = 1 To UBound($aFileList)-1
	  If $aFileList[$i][1] == 'ok' Then ContinueLoop
	  $sSMS &= StringFormat('%s\r\n', $aFileList[$i][0])
   Next

   MsgBox(64, 'SMS Send!', $sSMS)
Else
   MsgBox(64, 'Packing!', 'Create ZIP package!')
EndIf
 
Верх