Что нового

Получение данных о файле с FTP сервера.

Nikkor

Новичок
Сообщения
12
Репутация
0
Добрый день господа!
Кто-нибудь пробовал получать аттрибуты файла с FTP сервера(дата создания,дата изменения) при помощи стандартной библиотеки FTPex.au3. Сколько не пытался, выдает не понятный набор цифр. Хотя в справке написано:

[0] - Number of elements
[1] - File Attributes
[2] - Creation Time Low
[3] - Creation Time Hi
[4] - Access Time Low
[5] - Access Time Hi
[6] - Last Write Low
[7] - Last Write Hi
[8] - File Size High
[9] - File Size Low
[10] - File Name
[11] - Altername
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
#Include <FTPEx.au3>
#Include <WinAPI.au3>

Global Const $Host = ''
Global Const $Login = ''
Global Const $Password = ''

Global $hFtp, $hSession, $hFind, $aData

$hFtp = _FTP_Open('MyFtp')
$hSession = _FTP_Connect($hFtp, $Host, $Login, $Password)
$aData = _FTP_FindFileFirst($hSession, '', $hFind)
While Not @error
    ConsoleWrite('Файл: ' & $aData[10] & @CR)
	ConsoleWrite('Размер: ' & _WinAPI_MakeQWord($aData[9], $aData[8]) & ' байт' &  @CR)
	ConsoleWrite('Дата создания: ' & _FTP_FileTimeLoHiToStr($aData[2], $aData[3]) & @CR)
	ConsoleWrite('Дата изменения: ' & _FTP_FileTimeLoHiToStr($aData[6], $aData[7]) & @CR)
	ConsoleWrite('-------------------------' & @CR)
    $aData = _FTP_FindFileNext($hFind)
WEnd
_FTP_FindFileClose($hFind)
_FTP_Close($hFtp)
 
Автор
N

Nikkor

Новичок
Сообщения
12
Репутация
0
Спасибо огромное за пример, очень помогли мне! А почему, интересно, не работает пример с функцией _FTP_FindFileFirst, который я уже приводил ?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
CreatoR [?]
А для публичных FTP-файлов можно получить подобную информацию?

А в чем загвоздка?

Код:
#Include <FTPEx.au3>
#Include <WinAPI.au3>

Global Const $Host = 'ftp.mozilla-russia.org'
Global Const $Login = ''
Global Const $Password = ''

Global $hFtp, $hSession, $hFind, $aData

$hFtp = _FTP_Open('MyFtp')
$hSession = _FTP_Connect($hFtp, $Host, $Login, $Password)
$aData = _FTP_FindFileFirst($hSession, 'dictionaries', $hFind)
While Not @error
    ConsoleWrite('Файл: ' & $aData[10] & @CR)
    ConsoleWrite('Размер: ' & _WinAPI_MakeQWord($aData[9], $aData[8]) & ' байт' &  @CR)
    ConsoleWrite('Дата создания: ' & _FTP_FileTimeLoHiToStr($aData[2], $aData[3]) & @CR)
    ConsoleWrite('Дата изменения: ' & _FTP_FileTimeLoHiToStr($aData[6], $aData[7]) & @CR)
    ConsoleWrite('-------------------------' & @CR)
    $aData = _FTP_FindFileNext($hFind)
WEnd
_FTP_FindFileClose($hFind)
_FTP_Close($hFtp)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Yashied [?]
в чем загвоздка?
Просто в своё время я пробовал это получить разными функциями FTP, ничего не получалось. Спасибо.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Yashied
А возможно ещё получать полный заголовок файла, как в Http заголовке?

Код:
HTTP/1.1 200 OK
Server: uServ/1.5.2
Date: Sat, 06 Feb 2010 13:13:41 GMT
Content-Type: application/zip
Content-Length: 838562
Last-Modified: Thu, 29 Oct 2009 04:45:05 GMT
Connection: close
Accept-Ranges: bytes

:scratch:

В основном интересует Server, Content-Type, и Accept-Ranges (как я понял это индикатор поддержки докачки).


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

Кстати, вот написал небольшую функцию для парсинга аттрибутов файла, основано на информация с MSDN:

Код:
Func _FTP_FileAttributesToStr($iAttributes, $sSeparator=" | ")
	Local Const $FILE_ATTRIBUTE_ARCHIVE = 32 ;A file or directory that is an archive file or directory. Applications typically use this attribute to mark files for backup or removal. 
	Local Const $FILE_ATTRIBUTE_COMPRESSED = 2048 ;A file or directory that is compressed. For a file, all of the data in the file is compressed. For a directory, compression is the default for newly created files and subdirectories. 
	Local Const $FILE_ATTRIBUTE_DEVICE = 64 ;This value is reserved for system use.
	Local Const $FILE_ATTRIBUTE_DIRECTORY = 16 ;The handle that identifies a directory.
	Local Const $FILE_ATTRIBUTE_ENCRYPTED = 16384 ;A file or directory that is encrypted. For a file, all data streams in the file are encrypted. For a directory, encryption is the default for newly created files and subdirectories. 
	Local Const $FILE_ATTRIBUTE_HIDDEN = 2 ;The file or directory is hidden. It is not included in an ordinary directory listing. 
	Local Const $FILE_ATTRIBUTE_NORMAL = 128 ;A file that does not have other attributes set. This attribute is valid only when used alone. 
	Local Const $FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 8192 ;The file or directory is not to be indexed by the content indexing service. 
	Local Const $FILE_ATTRIBUTE_OFFLINE = 4096 ;The data of a file is not available immediately. This attribute indicates that the file data is physically moved to offline storage. This attribute is used by Remote Storage, which is the hierarchical storage management software. Applications should not arbitrarily change this attribute. 
	Local Const $FILE_ATTRIBUTE_READONLY = 1 ;A file that is read-only. Applications can read the file, but cannot write to it or delete it. This attribute is not honored on directories. For more information, see "You cannot view or change the Read-only or the System attributes of folders in Windows Server 2003, in Windows XP, or in Windows Vista".
	Local Const $FILE_ATTRIBUTE_REPARSE_POINT = 1024 ;A file or directory that has an associated reparse point, or a file that is a symbolic link. 
	Local Const $FILE_ATTRIBUTE_SPARSE_FILE = 512 ;A file that is a sparse file. 
	Local Const $FILE_ATTRIBUTE_SYSTEM = 4 ;A file or directory that the operating system uses a part of, or uses exclusively. 
	Local Const $FILE_ATTRIBUTE_TEMPORARY = 256 ;A file that is being used for temporary storage. File systems avoid writing data back to mass storage if sufficient cache memory is available, because typically, an application deletes a temporary file after the handle is closed. In that scenario, the system can entirely avoid writing the data. Otherwise, the data is written after the handle is closed. 
	Local Const $FILE_ATTRIBUTE_VIRTUAL = 65536 ;This value is reserved for system use.
	
	Local $sAttributes = ""
	
	Local $aAttribs = StringSplit( _
		"ARCHIVE|COMPRESSED|DEVICE|DIRECTORY|ENCRYPTED|HIDDEN|NORMAL|" & _
		"NOT_CONTENT_INDEXED|OFFLINE|READONLY|REPARSE_POINT|SPARSE_FILE|SYSTEM|TEMPORARY|VIRTUAL", "|")
	
	For $i = 1 To $aAttribs[0]
		If BitAND($iAttributes, Eval("FILE_ATTRIBUTE_" & $aAttribs[$i])) Then $sAttributes &= $aAttribs[$i] & $sSeparator
	Next
	
	Return StringRegExpReplace($sAttributes, "(\Q" & $sSeparator & "\E)+$", "")
EndFunc


используется для $aData[1] от «_FTP_FindFileFirst»:

Код:
;$sAttributes = _FTP_FileAttributesToStr($aData[1])
$sAttributes = _FTP_FileAttributesToStr(BitOR(128, 256))
ConsoleWrite($sAttributes & @CRLF)
 
Сообщения
7
Репутация
-1
[Автоматизация] Re: Получение данных о файле с FTP сервера


Поздравляю, мне кажется это великолепная мысль
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Re: Получение данных о файле с FTP сервера

WalterqSa,
Прекратите заниматься флудом. :mad:
 
Верх