Что нового

Сохранение даты создания файлов при скачивании с ftp сервера.

Andreich

Новичок
Сообщения
3
Репутация
0
Добрый день, господа!

Написал программку, которая скачивает логи с ftp сервера на локальную машину. Только вот дата создания скачанных файлов изменяется на текущее время скачивания(надеюсь поняли).

Вот собственно вопрос: Возможно ли сохранить время создания файлов при скачивании с ftp?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Re: Работа с ftp

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"Работа с ftp" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, Модератор форума.
 
Автор
A

Andreich

Новичок
Сообщения
3
Репутация
0
Надеялся что такое название прокатит, ну да ладно. Такое пойдёт?

P.s. Вопрос еще актуален
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Andreich,
Попробуйте так, у меня работает.
Код:
#include <FTPEx.au3>

$sServer = 'Server'
$sUsername = 'Username'
$sPass = 'Pass'
$sFileName = 'FileName'
$sFileTime = ''

$hOpen = _FTP_Open('MyFTP Control')
$hConn = _FTP_Connect($hOpen, $sServer, $sUsername, $sPass, 1)
$aFile = _FTP_ListToArrayEx($hConn, 2)
If Not @error Then
	For $i = 1 To $aFile[0][0]
		If $aFile[$i][0] == $sFileName Then
			ConsoleWrite($aFile[$i][3] & @LF)
			If StringInStr(@AutoItVersion, '3.3.6.') Then
				$sFileTime = StringRegExpReplace($aFile[$i][3], '^(\d{4})/(\d{2})/(\d{2})\s+(\d{2}):(\d{2}):(\d{2})$', '$1$3$2$4$5$6')
			ElseIf StringInStr(@AutoItVersion, '3.3.7.') Then;проверял только начиная с 3.3.7.17
				$sFileTime = StringRegExpReplace($aFile[$i][3], '[^0-9]', '')
			EndIf
			ConsoleWrite($sFileTime & @LF)
			_FTP_FileGet($hConn, $sFileName, @ScriptDir & '\' & $sFileName)
			ExitLoop
		EndIf
	Next
EndIf
_FTP_Close($hOpen)
If FileExists(@ScriptDir & '\' & $sFileName) And $sFileTime Then
	FileSetTime(@ScriptDir & '\' & $sFileName, $sFileTime, 1)
EndIf
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Код выше исправил.
Время создания файла должно быть $aFile[n][4] ($aFile[n][3] - время изменения), но там, где я код проверял время создания не отдает и возвращает пустую строку.

PS
Только у меня в бета-версиях, начиная с 3.3.7.17 (на ниже версиях не проверял), не работает функция __FTP_ListToArray() из FTPEx.au3 ? У меня этот код работает в бета только, если заменить FTPEx.au3 на версию из 3.3.6.1.
 
Автор
A

Andreich

Новичок
Сообщения
3
Репутация
0
P.s. всё работает, если в строке
Код:
FileSetTime(@ScriptDir & '\' & $sFileName, $sFileTime, 1)

убрать единичку(по умолчанию 0, что означает дата последнего изменения)


P.s. Если компилить через версию 3.3.7.6 то прога не работает. Забавно!
На сём тему считаю решённой. Спасибо за ответ!
 
Верх