<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: FTP Работа с фтп]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=7979</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7979&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: FTP Работа с фтп».]]></description>
		<lastBuildDate>Wed, 28 Sep 2016 04:08:33 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: FTP Работа с фтп]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=108058#p108058</link>
			<description><![CDATA[<p>Подытожу свои поиски.<br />В winscp есть все необходимое для работы с ftp, sftp.<br />И лог можно вывести в xml формате и хеш посчитать, если надо.<br /><a href="https://winscp.net/eng/index.php">https://winscp.net/eng/index.php</a></p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Wed, 28 Sep 2016 04:08:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=108058#p108058</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: FTP Работа с фтп]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=97453#p97453</link>
			<description><![CDATA[<p>Вот так:<br /></p><div class="codebox"><pre><code>size1:=InternetFileGetSize(&quot;ftp://speedtest:speedtest@ftp.otenet.gr/test5Gb-a.db&quot;)
size2:=InternetFileGetSize(&quot;ftp://speedtest:speedtest@ftp.otenet.gr/test10Gb.db&quot;)
size3:=InternetFileGetSize(&quot;ftp://speedtest:speedtest@ftp.otenet.gr/test100Mb.db&quot;)
sizeGB1:=round(size1/(1024**3),2) &quot; GB&quot;
sizeGB2:=round(size2/(1024**3),2) &quot; GB&quot;
sizeMB:=round(size3/(1024**2),2) &quot; MB&quot;
msgbox % sizeGB1 &quot;`n&quot; sizeGB2 &quot;`n&quot; sizeMB &quot;`n`n&quot; size &quot; Bytes`n&quot; round(size/(1024**3),2) &quot; GB&quot;
 
InternetFileGetSize( URL ) {
 
  hMod := DllCall( &quot;LoadLibrary&quot;, WStr, &quot;wininet.dll&quot; )
 
  hIO  := DllCall( &quot;wininet\InternetOpenW&quot;
                 , WStr, &quot;Microsoft Internet Explorer&quot;
                 , UInt, 4          ; INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY
                 , Int,  0, Int, 0, UInt, 0 )
 
  hIU  := DllCall( &quot;wininet\InternetOpenUrlW&quot;
                 , UInt, hIO, WStr, URL, Int, 0, Int, 0
                 , UInt, 0x84000000 ; INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_RELOAD
                 , UInt, 0 )
 
  If ( hIO &amp; hIU )
 
    If ( SubStr( URL,1,4 ) = &quot;ftp:&quot; )
   {
      varSetCapacity(huint,4)
      FileSize:=DllCall( &quot;wininet\FtpGetFileSize&quot;, UInt,hIU,UInt,&amp;huint,UInt)
      FileSize := FileSize + (NumGet(huint)*(2**32))
   }
 
    Else  DllCall( &quot;wininet\HttpQueryInfoW&quot;
                , UInt,  hIU
                , UInt,  0x20000005     ; HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER
                , UIntP, FileSize, UIntP,4, Int,0 )
 
 
  DllCall( &quot;wininet\InternetCloseHandle&quot;, UInt, hIU )
  DllCall( &quot;wininet\InternetCloseHandle&quot;, UInt, hIO )
  DllCall( &quot;FreeLibrary&quot;, UInt, hMod ) 
Return FileSize
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Tue, 15 Sep 2015 10:38:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=97453#p97453</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: FTP Работа с фтп]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=97225#p97225</link>
			<description><![CDATA[<p>Имеется функция определяющая размер файла , лежащего на фтп:<br /></p><div class="codebox"><pre><code>MsgBox % InternetFileGetSize( &quot;ftp://ftp.winzip.com/testdown/testdown.htm&quot; )
MsgBox % InternetFileGetSize( &quot;http://ahkscript.org/favicon.ico&quot; )
 
InternetFileGetSize( URL ) {
 
  hMod := DllCall( &quot;LoadLibrary&quot;, WStr, &quot;wininet.dll&quot; )
 
  hIO  := DllCall( &quot;wininet\InternetOpenW&quot;
                 , WStr, &quot;Microsoft Internet Explorer&quot; 
                 , UInt, 4          ; INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY
                 , Int,  0, Int, 0, UInt, 0 )
 
  hIU  := DllCall( &quot;wininet\InternetOpenUrlW&quot;
                 , UInt, hIO, WStr, URL, Int, 0, Int, 0
                 , UInt, 0x84000000 ; INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_RELOAD
                 , UInt, 0 )
 
  If ( hIO &amp; hIU ) 
 
    If ( SubStr( URL,1,4 ) = &quot;ftp:&quot; ) 
 
          FileSize := DllCall( &quot;wininet\FtpGetFileSize&quot;, UInt,hIU, UIntP,0, UInt )  
 
    Else  DllCall( &quot;wininet\HttpQueryInfoW&quot;
                , UInt,  hIU
                , UInt,  0x20000005     ; HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER
                , UIntP, FileSize, UIntP,4, Int,0 )
 
 
  DllCall( &quot;wininet\InternetCloseHandle&quot;, UInt, hIU )
  DllCall( &quot;wininet\InternetCloseHandle&quot;, UInt, hIO )
  DllCall( &quot;FreeLibrary&quot;, UInt, hMod )  
 
Return FileSize
}</code></pre></div><p>Но если файл более 4 гигов она возвращает неверный размер, равный остатку от деления на 4гб.</p><p>На autoit нашли решение:<br /><a href="https://www.autoitscript.com/forum/topic/58088-ftpau3-ftpopenfile/#comment-439706">https://www.autoitscript.com/forum/topi … ent-439706</a><br /></p><div class="quotebox"><blockquote><p>Mhhh. I seem to have had problems reading yesterday.<br />I see what this is now.<br />The file size could be larger than can be given by a 32 bit integer. But the return value is an integer. So part of the size is returned in the second parameter.<br />So this is what I think is needed.</p></blockquote></div><div class="codebox"><pre><code>Local $High  = dllstructCreate((&quot;uint&quot;)
Local $pHigh = dllstructgetptr($High)
Local $ai_FTPGetFileSize = DllCall(&#039;wininet.dll&#039;, &#039;int&#039;, &#039;FtpGetFileSize&#039;, &#039;long&#039;, $ai_FTPGetSizeHandle[0], &#039;long_ptr&#039;, $pHigh )

$ai_FTPGetFileSize = $ai_FTPGetFileSize[0] + DllStructGetData($High,1) * (2^32)</code></pre></div><p>Как бы его вставить в код ahk?</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Tue, 08 Sep 2015 12:55:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=97225#p97225</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: FTP Работа с фтп]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86944#p86944</link>
			<description><![CDATA[<p><span style="color: #CCCCCC">Дабы не плодить новые темы: настроил работу с FTP по статье &quot;FTP as easy as 1-2-3&quot;, но возникла проблема с отправленными на FTP файлами - у них всех размер 0. Согласно рекомендаций перевел в пассивный режим работы, но все равно отправленные файлы имеют нулевой размер. </span></p><p><span style="color: #CCCCCC">в FTPv2.ahk - this.InternetConnectFlags := 0x08000000 (включен пассивный режим), коннект устанавливается, файлики удаляются, т.е. взаимодействие есть.<br />Можно прикрутить виндовую стандартную утилиту ftp, или какую-то другую, но хотелось бы решить задачу с привлечением минимального количества сторонних софтин.</span></p><p><span style="color: #CCCCCC">Кто сталкивался с такой ситуацией?</span><br />Пардон, заработался, все функционирует..</p>]]></description>
			<author><![CDATA[null@example.com (emmetoya)]]></author>
			<pubDate>Thu, 02 Oct 2014 09:28:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86944#p86944</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: FTP Работа с фтп]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=68636#p68636</link>
			<description><![CDATA[<p>В общем, оказалось все это очень геморно.<br />Скрипт устаревший, поэтому лучше использовать<br /><a href="http://www.autohotkey.com/board/topic/68473-ftp-class-library-ftp-as-easy-as-1-2-3/">http://www.autohotkey.com/board/topic/6 … -as-1-2-3/</a><br />1) У него нету бага с темповыми файлами .pureftpd-upload<br />2) У него есть&nbsp; счетчик заливки.<br />Но самого скрипта на оффсайте почему-то уже нету.<br />Поэтому через гугл нашел тут<br /><a href="https://github.com/george2/ahk-libs/tree/master/FTPv2">https://github.com/george2/ahk-libs/tree/master/FTPv2</a><br />Но в скрипте досадный баг -&nbsp; для файлов больше, чем один гиг возвращет неверный размер&nbsp; - показывает &quot;-1&quot;.<br />Плюс ко всему скорость закачки у скрипта в 5 раз!!! меньше чем у того же filezilla.</p><p>Пришлось искать по инету утилитки, которые размер определяют - в итоге только одна!!! определяет размер правильно.<br />Кстати состряпанная на autoit<br /><a href="http://creator-lab.ucoz.ru/load/4-1-0-37">http://creator-lab.ucoz.ru/load/4-1-0-37</a></p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Fri, 18 Jan 2013 10:57:41 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=68636#p68636</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: FTP Работа с фтп]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=68587#p68587</link>
			<description><![CDATA[<p>Так как никто не отвечает, то отвечу себе сам.</p><p>1) Как я понял зависит от настроек сервера. Нужно настраивать так чтобы сразу файл заливался без всяких временных файлов. Стереть темповый файл .pureftpd-upload* никак не получается.<br />В принципе этот вопрос волнует меня больше всего - как стереть файл с фтп по маске.</p><p>2) Наверное данным скриптом невозможно.</p><p>3) Опять же разделить не получится, единственный вариант, что если после&nbsp; &quot;msgbox, Нету места&quot; следует &quot;msgbox, Пропал инет&quot; - значит все-таки дело в пропаже инета.</p><p>4) Походу в данный скрипт очень сложно.</p><p>Если есть у кого-то дополнения касаемо первого пункта - буду рад помощи!</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Thu, 17 Jan 2013 01:27:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=68587#p68587</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: FTP Работа с фтп]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=68569#p68569</link>
			<description><![CDATA[<p>Вот так работает.<br />Но 4 вопроса.</p><p>1) Если прервался во время заливки интернет, то после загрузки файла на фтп, скрипт возвращает правильный размер, но потом почему-то на фтп новый файл стирается, а появляется старый, который прервался.<br />Как такое избежать?<br />Вариант стирать каждый раз в начале скрипта файл по маске .pureftpd-upload как-то не очень.</p><p>2) Возможно ли при прерывании интернета продолжить загружать файл, а не начинать заново?</p><p>3) Если прекратится инет или на фтп не будет места во время исполнения <br /></p><div class="codebox"><pre><code>fileTransfer := FtpPutFile(localFile, remoteFile)</code></pre></div><p>Как разделить эти 2 возможных случая, типа 2 разных msgbox?</p><p>4) Легко ли вставить процентуальный счетчик заливки и оставшегося на заливку времени?</p><br /><div class="codebox"><pre><code>FtpHost = ftp.***
FtpPort = 21
FtpUsername = ***
FtpPassword = ***
localFile = E:\***
remoteFile = ***

uploadFile:
   FtpConnection := FtpOpen(FtpHost, FtpPort, FtpUsername, FtpPassword)
   If (FtpConnection != 1)
   {
      msgbox, Пропал инет
      GoTo, uploadFile
   }
   fileTransfer := FtpPutFile(localFile, remoteFile)
   If (fileTransfer != 1)
   {
      msgbox, Нету места
      GoTo, uploadFile
   }
   msgbox, upload complete
   Size := FtpGetFileSize(remoteFile)
   msgbox, % Size
   FtpClose()
   Return


;;;; THE BELOW CODE IS FROM THE LIBRARY - just to make this a runnable example

/* 
http://msdn.microsoft.com/library/en-us/wininet/wininet/ftp_sessions.asp 
http://msdn.microsoft.com/library/en-us/wininet/wininet/internetopen.asp 
http://msdn.microsoft.com/library/en-us/wininet/wininet/internetconnect.asp 
*/ 

FtpCreateDirectory(DirName) { 
global ic_hInternet 
r := DllCall(&quot;wininet\FtpCreateDirectory&quot;, &quot;Ptr&quot;, ic_hInternet, &quot;str&quot;, DirName) 
If (ErrorLevel != 0 or r = 0) 
return 0 
else 
return 1 
} 

FtpRemoveDirectory(DirName) { 
global ic_hInternet 
r := DllCall(&quot;wininet\FtpRemoveDirectory&quot;, &quot;Ptr&quot;, ic_hInternet, &quot;str&quot;, DirName) 
If (ErrorLevel != 0 or r = 0) 
return 0 
else 
return 1
} 

FtpSetCurrentDirectory(DirName) { 
global ic_hInternet 
r := DllCall(&quot;wininet\FtpSetCurrentDirectory&quot;, &quot;Ptr&quot;, ic_hInternet, &quot;str&quot;, DirName) 
If (ErrorLevel != 0 or r = 0) 
return 0 
else 
return 1 
} 

FtpPutFile(LocalFile, NewRemoteFile=&quot;&quot;, Flags=0) { 
;Flags: 
;FTP_TRANSFER_TYPE_UNKNOWN = 0 (Defaults to FTP_TRANSFER_TYPE_BINARY) 
;FTP_TRANSFER_TYPE_ASCII = 1 
;FTP_TRANSFER_TYPE_BINARY = 2 
If NewRemoteFile= 
NewRemoteFile := LocalFile 
global ic_hInternet 
r := DllCall(&quot;wininet\FtpPutFile&quot; 
, &quot;Ptr&quot;, ic_hInternet 
, &quot;str&quot;, LocalFile 
, &quot;str&quot;, NewRemoteFile 
, &quot;uint&quot;, Flags 
, &quot;uint&quot;, 0) ;dwContext 
If (ErrorLevel != 0 or r = 0) 
return 0 
else 
return 1 
} 

FtpGetFile(RemoteFile, NewFile=&quot;&quot;, Flags=0) { 
;Flags: 
;FTP_TRANSFER_TYPE_UNKNOWN = 0 (Defaults to FTP_TRANSFER_TYPE_BINARY) 
;FTP_TRANSFER_TYPE_ASCII = 1 
;FTP_TRANSFER_TYPE_BINARY = 2 
If NewFile= 
NewFile := RemoteFile 
global ic_hInternet 
r := DllCall(&quot;wininet\FtpGetFile&quot; 
, &quot;Ptr&quot;, ic_hInternet 
, &quot;str&quot;, RemoteFile 
, &quot;str&quot;, NewFile 
, &quot;int&quot;, 1 ;do not overwrite existing files 
, &quot;uint&quot;, 0 ;dwFlagsAndAttributes 
, &quot;uint&quot;, Flags 
, &quot;uint&quot;, 0) ;dwContext 
If (ErrorLevel != 0 or r = 0) 
return 0 
else 
return 1 
} 

FtpGetFileSize(FileName, Flags=0) { 
;Flags: 
;FTP_TRANSFER_TYPE_UNKNOWN = 0 (Defaults to FTP_TRANSFER_TYPE_BINARY) 
;FTP_TRANSFER_TYPE_ASCII = 1 
;FTP_TRANSFER_TYPE_BINARY = 2 
global ic_hInternet 
fof_hInternet := DllCall(&quot;wininet\FtpOpenFile&quot; 
, &quot;Ptr&quot;, ic_hInternet 
, &quot;str&quot;, FileName 
, &quot;uint&quot;, 0x80000000 ;dwAccess: GENERIC_READ 
, &quot;uint&quot;, Flags 
, &quot;uint&quot;, 0, &quot;Ptr&quot;) ;dwContext 
If (ErrorLevel != 0 or fof_hInternet = 0) 
return -1 

FileSize := DllCall(&quot;wininet\FtpGetFileSize&quot;, &quot;Ptr&quot;, fof_hInternet, &quot;uint&quot;, 0) 
DllCall(&quot;wininet\InternetCloseHandle&quot;,  &quot;Ptr&quot;, fof_hInternet) 
return, FileSize 
} 


FtpDeleteFile(FileName) { 
global ic_hInternet 
r :=  DllCall(&quot;wininet\FtpDeleteFile&quot;, &quot;Ptr&quot;, ic_hInternet, &quot;str&quot;, FileName) 
If (ErrorLevel != 0 or r = 0) 
return 0 
else 
return 1 
} 

FtpRenameFile(Existing, New) { 
global ic_hInternet 
r := DllCall(&quot;wininet\FtpRenameFile&quot;, &quot;Ptr&quot;, ic_hInternet, &quot;str&quot;, Existing, &quot;str&quot;, New) 
If (ErrorLevel != 0 or r = 0) 
return 0 
else 
return 1 
} 

FtpOpen(Server, Port=21, Username=0, Password=0 ,Proxy=&quot;&quot;, ProxyBypass=&quot;&quot;) { 
IfEqual, Username, 0, SetEnv, Username, anonymous 
IfEqual, Password, 0, SetEnv, Password, anonymous 

If (Proxy != &quot;&quot;) 
AccessType=3 
Else 
AccessType=1 
;#define INTERNET_OPEN_TYPE_PRECONFIG                    0   // use registry configuration 
;#define INTERNET_OPEN_TYPE_DIRECT                       1   // direct to net 
;#define INTERNET_OPEN_TYPE_PROXY                        3   // via named proxy 
;#define INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY  4   // prevent using java/script/INS 

global ic_hInternet, io_hInternet, hModule 
hModule := DllCall(&quot;LoadLibrary&quot;, &quot;str&quot;, &quot;wininet.dll&quot;, &quot;Ptr&quot;) 

io_hInternet := DllCall(&quot;wininet\InternetOpen&quot; 
, &quot;str&quot;, A_ScriptName ;lpszAgent 
, &quot;UInt&quot;, AccessType 
, &quot;str&quot;, Proxy 
, &quot;str&quot;, ProxyBypass 
, &quot;UInt&quot;, 0, &quot;Ptr&quot;) ;dwFlags 

If (ErrorLevel != 0 or io_hInternet = 0) { 
FtpClose() 
return 0
} 

ic_hInternet := DllCall(&quot;wininet\InternetConnect&quot; 
, &quot;Ptr&quot;, io_hInternet 
, &quot;str&quot;, Server 
, &quot;uint&quot;, Port 
, &quot;str&quot;, Username 
, &quot;str&quot;, Password 
, &quot;uint&quot; , 1 ;dwService (INTERNET_SERVICE_FTP = 1) 
, &quot;uint&quot;, 0 ;dwFlags 
, &quot;uint&quot;, 0, &quot;Ptr&quot;) ;dwContext 

If (ErrorLevel != 0 or ic_hInternet = 0) 
return 0 
else 
return 1 
} 

FtpClose() { 
global ic_hInternet, io_hInternet, hModule 
DllCall(&quot;wininet\InternetCloseHandle&quot;,  &quot;Ptr&quot;, ic_hInternet) 
DllCall(&quot;wininet\InternetCloseHandle&quot;,  &quot;Ptr&quot;, io_hInternet) 
DllCall(&quot;FreeLibrary&quot;, &quot;Ptr&quot;, hModule) 
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Wed, 16 Jan 2013 14:25:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=68569#p68569</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: FTP Работа с фтп]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=68567#p68567</link>
			<description><![CDATA[<p>Вот <a href="http://www.autohotkey.com/board/topic/9463-dllcall-basic-ftp-functions/">здесь</a> посмотри. Только нужно перевести на &quot;современный&quot; AHK.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Wed, 16 Jan 2013 13:19:45 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=68567#p68567</guid>
		</item>
		<item>
			<title><![CDATA[AHK: FTP Работа с фтп]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=68519#p68519</link>
			<description><![CDATA[<p>Как узнать размер файла лежащего на фтп, не скачивая его.<br />Мне нужно&nbsp; удостовериться, что файл залит целиком.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Tue, 15 Jan 2013 21:33:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=68519#p68519</guid>
		</item>
	</channel>
</rss>
