Beege Posted August 28, 2007 Share Posted August 28, 2007 (edited) So this is just a start but it works so far. There are a couple of bugs in the progress bars but not to bad. The explorer is uses _GUILVSort7.au3 so that you can doubleclick on a directory and navigate to it. Download with progress does work and it also works for downloading full folders. Just check the boxes and click download. I would love anybody to look at the uploading file function i started. Its driving me crazy. I know its possible and im just missing something stupid. I have rewritten it a thousand times and still nothing!! The zip file included should have everything need to run the script so let me know if it wont work. expandcollapse popup#include <GUIConstants.au3> #include <GuiListView.au3> #Include <GuiList.au3> #include <array.au3> #include <file.au3> #include <math.au3> #include "_GUILVSort7.au3" #include "FTP.au3" #include "API.au3" Global Const $INTERNET_FLAG_EXISTING_CONNECT = 0x20000000 Global Const $INTERNET_FLAG_PASSIVE = 0x08000000 Global Const $INTERNET_FLAG_TRANSFER_ASCII = 0x00000001 Global Const $INTERNET_FLAG_TRANSFER_BINARY = 0x00000002 Global Const $INTERNET_FLAG_NEED_FILE = 0x00000010 Global Const $INTERNET_DEFAULT_FTP_PORT = 21 Global Const $INTERNET_SERVICE_FTP = 1 Global Const $INTERNET_FLAG_MAKE_PERSISTENT = 0x02000000 Global Const $INTERNET_FLAG_RESYNCHRONIZE = 0x00000800 Global Const $INTERNET_FLAG_RELOAD = 0x80000000 Global Const $INTERNET_FLAG_HYPERLINK = 0x00000400 Global Const $INTERNET_FLAG_DONT_CACHE = 0x04000000 Global Const $FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x0100 Global Const $FORMAT_MESSAGE_IGNORE_INSERTS = 0x0200 Global Const $FORMAT_MESSAGE_FROM_STRING = 0x0400 Global Const $FORMAT_MESSAGE_FROM_HMODULE = 0x0800 Global Const $FORMAT_MESSAGE_FROM_SYSTEM = 0x1000 Global Const $FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x2000 Global $hList, $LastDir, $size, $download, $TTime, $Total_Bytes_Read, $TdFiles, $download_List, $TotaldFiles, _ $dirs, $Total_Size, $Total_Bytes, $mdsize, $mdbytes_read, $md_Time, $Total_Files, $Total_Dirs, $bytes, $regIP, _ $regPass, $regUser, $deleted, $connected, $FTPconnect, $dlist, $ipchange = 0, $maxdword = (2 ^ 32) - 1, $currentdir = '' Global $cache, $cachedata, $cacheNames _RecentConnections() $hGUI = GUICreate("~Beege~ FTP Navigator", 549, 387, 244, 205, -1, BitOR($WS_EX_ACCEPTFILES, $WS_EX_WINDOWEDGE)) $wininet = DllOpen('wininet.dll') _GUISetCheckBoxesPresent ($hGUI, $hList, 1, 1, 7) $hList = _GUICtrlCreateListViewIndexed ("File |size |Bytes", 16, 8, 297, 225, $LVS_EX_GRIDLINES, BitOR($LVS_EX_GRIDLINES, $LVS_EX_HEADERDRAGDROP, $LVS_EX_FULLROWSELECT, $LVS_EX_REGIONAL));Drag&Drop Column _GUICtrlListViewSetColumnWidth($hList, 0, 225) _GUICtrlListViewSetColumnWidth($hList, 1, 60) _GUICtrlListViewSetColumnWidth($hList, 2, 0) _GUICtrlListViewSetColumnWidth($hList, 3, 0) _GUICtrlListViewSetColumnWidth($hList, 4, 0) $IP = GUICtrlCreateInput($regIP, 400, 40, 105, 21) GUICtrlCreateLabel("", 72, 320, 4, 4) GUICtrlCreateLabel("Files :", 16, 240, 31, 17) $tfiles = GUICtrlCreateLabel("", 48, 240, 52, 17) GUICtrlCreateLabel("Total Size :", 200, 240, 57, 17) $tsize = GUICtrlCreateLabel("", 256, 240, 64, 17) $Progress1 = GUICtrlCreateProgress(16, 272, 513, 17) $Progress2 = GUICtrlCreateProgress(16, 320, 513, 17) GUICtrlSetResizing(-1, $GUI_DOCKAUTO) GUICtrlCreateLabel("Current File :", 16, 296, 63, 17) $currentfile = GUICtrlCreateLabel("", 80, 296, 4, 4) $checkall = GUICtrlCreateButton("Check All", 328, 168, 83, 25, 0) $Uncheckall = GUICtrlCreateButton("Uncheck All", 328, 200, 83, 25, 0) $Back = GUICtrlCreateButton("Back", 328, 136, 81, 25, 0) $Userbox = GUICtrlCreateInput($regUser, 400, 72, 105, 21) $Passbox = GUICtrlCreateInput($regPass, 400, 104, 105, 21) GUICtrlCreateLabel("Server Address", 320, 40, 76, 17, $SS_RIGHT) GUICtrlCreateLabel("User Name", 336, 72, 57, 17, $SS_RIGHT) GUICtrlCreateLabel("Password", 344, 104, 50, 17, $SS_RIGHT) $Upload_files = GUICtrlCreateButton("Upload Files", 432, 168, 83, 25, 0) $Pause = GUICtrlCreateButton("Pause", 432, 200, 83, 25, 0) $download = GUICtrlCreateButton("Download", 432, 136, 81, 25, 0) GUICtrlCreateLabel("Dirs :", 112, 240, 28, 17) $tdirs = GUICtrlCreateLabel("", 144, 240, 58, 17) $file_status = GUICtrlCreateLabel("", 80, 296, 450, 17) $Connect = GUICtrlCreateButton("Connect", 328, 8, 81, 25, 0) $exit = GUICtrlCreateButton("Exit", 432, 8, 81, 25, 0) $Rename = GUICtrlCreateButton("Rename", 328, 232, 83, 25, 0) $Delete = GUICtrlCreateButton("Delete", 432, 232, 83, 25, 0) $Total_Progress = GUICtrlCreateLabel("", 96, 344, 436, 17) GUICtrlCreateLabel("Total Progress:", 16, 344, 71, 17) GUISetState(@SW_SHOW) Do $msg = GUIGetMsg() _GetLVInfo ($msg) Sleep(10) Select Case $msg = $Connect $ipsafe = _CheckIP(GUICtrlRead($IP)) GUICtrlSetData($IP, $ipsafe) $FTPconnect = _connect() If $FTPconnect = 0 Then ContinueLoop $LastDir = _FTPGetCurrentDir($FTPconnect) _GetList() Case $msg = $Back $Current_Directory = _FTPGetCurrentDir($FTPconnect) If $Current_Directory = '/' Then ContinueLoop $LastDir = StringReplace(StringLeft($LastDir, StringInStr($LastDir, '/', 0, -2)), '//', '/') _FtpSetCurrentDir($FTPconnect, $LastDir) _GetList() Case $msg = $Uncheckall $ret = _GUICtrlListViewSetCheckState($hList, -1, 0) Case $msg = $checkall $ret = _GUICtrlListViewSetCheckState($hList, -1, 1) Case $msg = $download $TTime = TimerInit() $Total_Size = 0 $dirs = 0 $TotaldFiles = 1 $savedir = FileSelectFolder("Choose a folder.", "", 5, @ScriptDir) ;$savedir = 'c:\test' If @error = 1 Then ContinueLoop $cur1 = _FTPGetCurrentDir($FTPconnect) $cur = StringTrimLeft($cur1, StringInStr($cur1, '/', 2, -1)) $download_List = _Get_Download_List() For $i = 1 To $download_List[0] If StringLeft($download_List[$i], 1) = '$' Then $dirs = $dirs + 1 ContinueLoop EndIf $split = StringSplit($download_List[$i], '|') _ArrayAdd($download, $split[1]) $Total_Size = $Total_Size + $split[2] $TotaldFiles = $TotaldFiles + 1 Next ;_ArrayDisplay($download_List, _Bytes_Convert($Total_Size) & ' | ' & $TotaldFiles & ' | ' & $dirs) For $i = 1 To UBound($download_List) - 1 If StringLeft($download_List[$i], 1) = '$' Then _FtpSetCurrentDir($FTPconnect, StringTrimLeft($download_List[$i], 1)) $replace = StringReplace(StringTrimLeft(StringReplace($download_List[$i], $cur1, ''), 2), '/', '\') $check = $savedir & '\' & StringTrimRight($replace, 1) If Not FileExists($check) Then DirCreate($check) ContinueLoop EndIf $split = StringSplit($download_List[$i], '|') $mdftpfile = StringTrimLeft($split[1], StringInStr($split[1], '/', 2, -1)) $mdLocal_Dir_file = StringReplace(StringReplace($split[1], $cur1 & '/', ''), '/', '\') _FTPDownloadFile($FTPconnect, $Progress1, $file_status, $mdftpfile, $split[2], $savedir & '\' & $mdLocal_Dir_file) $TdFiles = $TdFiles + 1 Next Case $msg = $exit ExitLoop Case $msg = $Rename $selected = _GUICtrlListViewGetCurSel($hList) $name = _GUICtrlListViewGetItemTextArray($hList, $selected) $box = InputBox('Rename File', '', $name[1]) If @error Then ContinueCase _FTPRenameFile ($FTPconnect, $name[1], $box) _GetList() _GUICtrlListViewSetItemSelState($hList, $selected, 1, 0) Case $msg = $Delete $deleted = 0 For $i = 0 To _GUICtrlListViewGetItemCount($hList) - 1 $is_Checked = _GUICtrlListViewGetCheckedState($hList, $i) If $is_Checked = 1 Then $deleted = $deleted + 1 $checked = _GUICtrlListViewGetItemTextArray($hList, $i) _FTPDelFile ($FTPconnect, $checked[1]) EndIf Next If $deleted = 0 Then ContinueLoop _GetList() Case $msg = $Pause Case $msg = $Upload_files EndSelect Until $msg = $GUI_EVENT_CLOSE DllClose($wininet) If $connected = 1 Then _FTPClose ($FTPconnect) Exit ;My Functions Func _CheckIP($IP) $ipcheck = StringReplace($IP, '.', '') If StringIsDigit($ipcheck) Then Return $IP Else TCPStartup() $newip = TCPNameToIP($IP) TCPShutdown() $ipchange = $IP Return $newip EndIf EndFunc ;==>_CheckIP Func _RecentConnections() $regIP = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Bjs FTP Xbox", "IP") If @error Then RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Bjs FTP Xbox", "IP", "REG_SZ", "ftp.ch.freebsd.org") $regIP = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Bjs FTP Xbox", "IP") EndIf $regUser = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Bjs FTP Xbox", "User") If @error Then RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Bjs FTP Xbox", "IP", "REG_SZ", "") $regUser = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Bjs FTP Xbox", "User") EndIf $regPass = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Bjs FTP Xbox", "Pass") If @error Then RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Bjs FTP Xbox", "IP", "REG_SZ", "") $regPass = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Bjs FTP Xbox", "Pass") EndIf EndFunc ;==>_RecentConnections Func _GetList() _GUICtrlListViewDeleteAllItems($hList) Local $bytes = 0 $FolderList = _FTPFiles_and_Sizes_ListtoArray($FTPconnect, 1, $INTERNET_FLAG_RESYNCHRONIZE) If Not IsArray($FolderList) Then $nItem = GUICtrlCreateListViewItem('No Items in Directory', $hList) Return 0 EndIf _ArraySort($FolderList, 0, 1) For $i = 1 To $FolderList[0] $nItem = GUICtrlCreateListViewItem($FolderList[$i] & '|DIR', $hList) Next GUICtrlSetData($tdirs, $FolderList[0]) $FileList = _FTPFiles_and_Sizes_ListtoArray($FTPconnect, 2, $INTERNET_FLAG_RESYNCHRONIZE) _ArraySort($FileList, 0, 1) For $i = 1 To $FileList[0] $size = StringSplit($FileList[$i], '|') If $size[2] = -1 Then $size[2] = (_FTPGetFileSize($FTPconnect, $size[1]) + $maxdword) $nItem = GUICtrlCreateListViewItem($size[1] & '|' & _Bytes_Convert($size[2]) & '|' & $size[2], $hList) $bytes = $bytes + $size[2] GUICtrlSetData($tsize, _Bytes_Convert($bytes)) Next GUICtrlSetData($tfiles, $FileList[0]) _GUICtrlListViewSetColumnWidth($hList, 2, 0) Return 0 EndFunc ;==>_GetList Func _connect() _GUICtrlListViewDeleteAllItems($hList) $XBOX = _FTPOpen ('XBOX') $conn = _FTPConnect ($XBOX, GUICtrlRead($IP), GUICtrlRead($Userbox), GUICtrlRead($Passbox), $INTERNET_DEFAULT_FTP_PORT) If @error Then SplashTextOn('ERROR', 'Could Not Connect to ' & GUICtrlRead($IP), 500, 50) Sleep(2000)[attachment=16317:FTP_Explorer.zip] SplashOff() _FTPClose ($XBOX) Return 0 Else RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Bjs FTP Xbox", "IP", "REG_SZ", GUICtrlRead($IP)) If Not $ipchange = 0 Then RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Bjs FTP Xbox", "IP", "REG_SZ", $ipchange) RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Bjs FTP Xbox", "User", "REG_SZ", GUICtrlRead($Userbox)) RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Bjs FTP Xbox", "Pass", "REG_SZ", GUICtrlRead($Passbox)) $connected = 1 EndIf Return $conn EndFunc ;==>_connect Func _FTPDownloadFile($l_FTPSession, ByRef $Gui_Progress, ByRef $Gui_Filestatus, $s_FileName, $size, $sv_file, $bufferlen = 16768) $time = TimerInit() Local $ai_FTPopenfile = DllCall('wininet.dll', 'int', 'FtpOpenFile', 'long', $l_FTPSession, 'str', $s_FileName, 'long', 0x80000000, 'long', 0x00000002, 'long', 0) Local $av_InternetReadFile[5] = [0, 0, "", 0, 1] Local $v_Struct = DllStructCreate("udword") Local $bytes_read = 0, $buf_writ = 0, $prog = 0, $x = 0 Local $fh = _APIFileOpen ($sv_file) Local $buf = DllStructCreate("byte[" & $bufferlen & "]") While $av_InternetReadFile[4] <> 0 $av_InternetReadFile = DllCall('wininet.dll', "int", "InternetReadFile", "long", $ai_FTPopenfile[0], "ptr", DllStructGetPtr($buf), "long", $bufferlen, "ptr", DllStructGetPtr($v_Struct)) $av_InternetReadFile[4] = DllStructGetData($v_Struct, 1) If @error Then GUICtrlSetData($Gui_Progress, 0) GUICtrlSetData($Gui_Filestatus, '') ExitLoop ElseIf $av_InternetReadFile[4] < 1 Then ExitLoop EndIf $bytes_read += $av_InternetReadFile[4] $Total_Bytes_Read = $Total_Bytes_Read + $av_InternetReadFile[4] $buf_writ = _BinaryFileWrite ($fh, $buf) If $buf_writ < 1 Then GUICtrlSetData($Gui_Progress, 0) GUICtrlSetData($Gui_Filestatus, '') ExitLoop EndIf $prog1 = ($bytes_read / $size) * 100 $prog2 = ($Total_Bytes_Read / $Total_Size) * 100 $x = $x + 1 $divs = _MathCheckDiv($x, 5) ; -----stop flickering If ($bytes_read/ (TimerDiff($md_Time) / 1000)) > 1048000 Then $divs = _MathCheckDiv($x, 50) If $divs = 2 Then GUICtrlSetData($Gui_Progress, $prog1) GUICtrlSetData($Gui_Filestatus, $s_FileName & ' ' & _Bytes_Convert($bytes_read) & '/' & _Bytes_Convert($size) & ' @ ' & _Bytes_Convert($bytes_read/ (TimerDiff($time) / 1000)) & '/sec') GUICtrlSetData($Progress2, $prog2) GUICtrlSetData($Total_Progress, _Bytes_Convert($Total_Bytes_Read) & '/' & _Bytes_Convert($Total_Size) & ' @ ' & _Bytes_Convert($Total_Bytes_Read/ (TimerDiff($TTime) / 1000)) & '/sec ' & $TdFiles & '/' & $TotaldFiles) EndIf WEnd $v_Struct = 0 DllCall('wininet.dll', "int", "InternetCloseHandle", "long", $ai_FTPopenfile[0]) _APIFileClose ($fh) GUICtrlSetData($Progress1, 0) GUICtrlSetData($file_status, '') GUICtrlSetData($Progress2, 0) GUICtrlSetData($Total_Progress, '') Return 0 EndFunc ;==>_FTPDownloadFile Func _Get_Download_List() Local $download_List $download_List = _ArrayCreate($download_List) For $i = 0 To _GUICtrlListViewGetItemCount($hList) - 1 $is_Checked = _GUICtrlListViewGetCheckedState($hList, $i) If $is_Checked = 1 Then $checked = _GUICtrlListViewGetItemTextArray($hList, $i) If $checked[2] = 'DIR' Then _Get_Download_Folder_List($FTPconnect, $LastDir, $checked[1], $download_List) _GUICtrlListViewSetCheckState($hList, $i, 0) ContinueLoop EndIf EndIf Next _ArrayAdd($download_List, '$' & $LastDir) For $i = 0 To _GUICtrlListViewGetItemCount($hList) - 1 $is_Checked = _GUICtrlListViewGetCheckedState($hList, $i) If $is_Checked = 1 Then $checked = _GUICtrlListViewGetItemTextArray($hList, $i) If $checked[2] = 'DIR' Then _Get_Download_Folder_List($FTPconnect, $LastDir, $checked[1], $download_List) _GUICtrlListViewSetCheckState($hList, $i, 0) ContinueLoop EndIf _ArrayAdd($download_List, $LastDir & $checked[1] & '|' & $checked[3]) _GUICtrlListViewSetCheckState($hList, $i, 0) EndIf Next Return $download_List EndFunc ;==>_Get_Download_List Func _Get_Download_Folder_List($FTPconnect, $Start_Dir, $FTp_dir, ByRef $array) Local $change_dir, $list, $backup, $FolderList, $FileList $change_dir = $Start_Dir $change_dir = $change_dir & $FTp_dir & '/' _FtpSetCurrentDir($FTPconnect, $change_dir) $FolderList = _FTPFiles_and_Sizes_ListtoArray($FTPconnect, 1, $INTERNET_FLAG_RESYNCHRONIZE) If IsArray($FolderList) Then _ArraySort($FolderList, 0, 1) For $i = 1 To $FolderList[0] _Get_Download_Folder_List($FTPconnect, $change_dir, $FolderList[$i], $array) Next EndIf _ArrayAdd($array, '$' & $change_dir) $FileList = _FTPFiles_and_Sizes_ListtoArray($FTPconnect, 2, $INTERNET_FLAG_RESYNCHRONIZE) If IsArray($FileList) Then _ArraySort($FileList, 0, 1) For $i = 1 To $FileList[0] _ArrayAdd($array, $change_dir & $FileList[$i]) Next EndIf $array[0] = UBound($array) - 1 _FtpSetCurrentDir($FTPconnect, $Start_Dir) ;_ArrayDisplay($array) EndFunc ;==>_Get_Download_Folder_List Func _Bytes_Convert($bytes) Select Case $bytes >= 1048000000 Return Round($bytes / 1048576000, 1) & ' GB' Case $bytes >= 1048000 Return Round($bytes / 1048576, 1) & ' MB' Case $bytes >= 1048 Return Round($bytes / 1048.576, 1) & ' KB' Case Else Return $bytes & ' Bytes' EndSelect EndFunc ;==>_Bytes_Convert ;Modified Functions Func ListView_DoubleClick() If _GUICtrlListViewGetItemText($LISTVIEWCTRL, $LVINFO[0], 1) <> 'DIR' Then Return $LastDir = $LastDir & _GUICtrlListViewGetItemText($LISTVIEWCTRL, $LVINFO[0], $LVINFO[1]) & '/' _FtpSetCurrentDir($FTPconnect, $LastDir) _GetList() EndFunc ;==>ListView_DoubleClick Func _FTPFiles_and_Sizes_ListtoArray($l_FTPSession, $Return_Type = 0, $l_Flags = 0, $l_Context = 0) Dim $array, $size $array = _ArrayCreate($array) $str = "dword;int64;int64;int64;dword;dword;dword;dword;char[256];char[14]" $WIN32_FIND_DATA = DllStructCreate($str) Local $callFindFirst = DllCall('wininet.dll', 'int', 'FtpFindFirstFile', 'long', $l_FTPSession, 'str', "", 'ptr', DllStructGetPtr($WIN32_FIND_DATA), 'long', $l_Flags, 'long', $l_Context) If Not $callFindFirst[0] Then SetError(-1) Return 0 EndIf $ret = "" While 1 Select Case $Return_Type = 0 ; Folders and files If DllStructGetData($WIN32_FIND_DATA, 1) = 16 Then _ArrayInsert($array, 1, DllStructGetData($WIN32_FIND_DATA, 9) & '|DIR') ; Add Folder to top of array Else If DllStructGetData($WIN32_FIND_DATA, 6) < 0 Then $size = $maxdword + (DllStructGetData($WIN32_FIND_DATA, 6)) Else $size = DllStructGetData($WIN32_FIND_DATA, 6) EndIf _ArrayAdd($array, DllStructGetData($WIN32_FIND_DATA, 9) & '|' & $size) ; Add file to array EndIf Case $Return_Type = 1 ; Folders only If DllStructGetData($WIN32_FIND_DATA, 1) = 16 Then _ArrayAdd($array, DllStructGetData($WIN32_FIND_DATA, 9)) EndIf Case $Return_Type = 2 ; Files only If DllStructGetData($WIN32_FIND_DATA, 1) <> 16 Then If DllStructGetData($WIN32_FIND_DATA, 6) < 0 Then $size = $maxdword + (DllStructGetData($WIN32_FIND_DATA, 6)) ;MsgBox(0, '', DllStructGetData($WIN32_FIND_DATA, 5) & ' | ' & DllStructGetData($WIN32_FIND_DATA, 6) & ' | ' & DllStructGetData($WIN32_FIND_DATA, 7) & ' | ' & DllStructGetData($WIN32_FIND_DATA, 8)) Else $size = DllStructGetData($WIN32_FIND_DATA, 6) EndIf If DllStructGetData($WIN32_FIND_DATA, 6) = -1 Then $size = -1 ;MsgBox(0,'',DllStructGetData($WIN32_FIND_DATA, 5) &' | ' &DllStructGetData($WIN32_FIND_DATA, 6) & ' | ' & DllStructGetData($WIN32_FIND_DATA, 7) & ' | ' & DllStructGetData($WIN32_FIND_DATA, 8)) _ArrayAdd($array, DllStructGetData($WIN32_FIND_DATA, 9) & '|' & $size) EndIf EndSelect Local $callFindNext = DllCall('wininet.dll', 'int', 'InternetFindNextFile', 'long', $callFindFirst[0], 'ptr', DllStructGetPtr($WIN32_FIND_DATA)) If Not $callFindNext[0] Then ExitLoop EndIf WEnd $WIN32_FIND_DATA = 0 $array[0] = UBound($array) - 1 $close = DllCall('wininet.dll', "int", "InternetCloseHandle", "long", $callFindFirst[0]) Return $array EndFunc ;==>_FTPFiles_and_Sizes_ListtoArray Func _FTPGetFileSize($l_FTPSession, $s_FileName) Local $size Local $ai_FTPGetSizeHandle = DllCall('wininet.dll', 'int', 'FtpOpenFile', 'long', $l_FTPSession, 'str', $s_FileName, 'long', 0x80000000, 'long', 0x04000002, 'long', 0) Local $ai_FTPGetFileSize = DllCall('wininet.dll', 'int', 'FtpGetFileSize', 'long', $ai_FTPGetSizeHandle[0], 'long', $size) If @error Or $ai_FTPGetFileSize[0] = 0 Then $close = DllCall('wininet.dll', 'int', 'InternetCloseHandle', 'long', $ai_FTPGetSizeHandle[0]) SetError(-1) Return 0 EndIf $close = DllCall('wininet.dll', 'int', 'InternetCloseHandle', 'long', $ai_FTPGetSizeHandle[0]) Return $ai_FTPGetFileSize[0] EndFunc ;==>_FTPGetFileSize ;FTP Functions Func _FTPGetCurrentDir($l_FTPSession) Local $ai_FTPGetCurrentDir = DllCall('wininet.dll', 'int', 'FtpGetCurrentDirectory', 'long', $l_FTPSession, 'str', "", 'long_ptr', 260) If @error Or $ai_FTPGetCurrentDir[0] = 0 Then SetError(-1) Return 0 EndIf Return $ai_FTPGetCurrentDir[2] EndFunc ;==>_FTPGetCurrentDir Func _FtpSetCurrentDir($l_FTPSession, $s_Remote) Local $ai_FTPSetCurrentDir = DllCall('wininet.dll', 'int', 'FtpSetCurrentDirectory', 'long', $l_FTPSession, 'str', $s_Remote) If @error Or $ai_FTPSetCurrentDir[0] = 0 Then SetError(-1) Return 0 EndIf Return $ai_FTPSetCurrentDir[2] EndFunc ;==>_FtpSetCurrentDir Func _FTPPutFolderContents($FTPSession, $s_LocalFolder, $s_RemoteFolder, $b_RecursivePut) Dim $i $search = FileFindFirstFile($s_LocalFolder & "\*.*") If $search = -1 Then Return $i EndIf While 1 $file = FileFindNextFile($search) If @error Then ExitLoop If StringInStr(FileGetAttrib($s_LocalFolder & "\" & $file), "D") Then _FTPMakeDir ($FTPSession, $s_RemoteFolder & "/" & $file) If $b_RecursivePut Then _FTPPutFolderContents($FTPSession, $s_LocalFolder & "\" & $file, $s_RemoteFolder & "/" & $file, $b_RecursivePut) EndIf Else _FTPPutFile ($FTPSession, $s_LocalFolder & "\" & $file, $s_RemoteFolder & "/" & $file, 0, 0) EndIf WEnd FileClose($search) EndFunc ;==>_FTPPutFolderContents Func _GetLastError() Local $aResult $aResult = DllCall("Kernel32.dll", "int", "GetLastError") Return $aResult[0] EndFunc ;==>_GetLastError Func _ShowError($sText, $bExit = True) MsgBox(16 + 4096, "Error", $sText) If $bExit Then Exit EndFunc ;==>_ShowError Func _FormatMessage($iFlags, $pSource, $iMessageID, $iLanguageID, $pBuffer, $iSize, $vArguments) Local $aResult $aResult = DllCall("Kernel32.dll", "int", "FormatMessageA", "int", $iFlags, "hwnd", $pSource, _ "int", $iMessageID, "int", $iLanguageID, "ptr", $pBuffer, "int", $iSize, _ "ptr", $vArguments) Return $aResult[0] EndFunc ;==>_FormatMessage Func _GetLastErrorMessage() Local $pBuffer, $rBuffer $rBuffer = DllStructCreate("char[4096]") $pBuffer = DllStructGetPtr($rBuffer) _FormatMessage($FORMAT_MESSAGE_FROM_SYSTEM, 0, _GetLastError(), 0, $pBuffer, 4096, 0) Return DllStructGetData($rBuffer, 1) EndFunc ;==>_GetLastErrorMessage ;Not Working Func _FTPUploadFile($l_FTPSession, ByRef $Gui_Progress, ByRef $Gui_CurrentFile, $s_FileName, $sv_file, $bufferlen = 1048);----NOT WORKING $flags = BitOR($INTERNET_FLAG_TRANSFER_BINARY, $INTERNET_FLAG_NEED_FILE) Local $hand = DllStructCreate('hwnd') Local $fh = _APIFileOpen ($sv_file) ;Local $localfile = _APIFileOpen('c:\coy.avi') Local $ai_FTPopenfile = DllCall('wininet.dll', 'int', 'FtpOpenFile', 'long', $l_FTPSession, 'str', $s_FileName, 'long', 0x40000000, 'long', $flags, 'long', 0) ;Local $ai_Lockfile = DllCall('wininet.dll', 'int', 'InternetLockRequestFile', 'long', $ai_FTPopenfile[0], 'ptr', DllStructGetPtr($hand)) Local $Outbytesread = DllStructCreate("udword") Local $bytes_read = 0, $buf_writ = 0, $prog = 0, $x = 0, $pos = 0 Local $sv_fileSize = FileGetSize($sv_file) Local $buffer = DllStructCreate("byte[" & $bufferlen & "]") Local $exit = 0 While $sv_fileSize <> 0 If $sv_fileSize < $bufferlen Then $buf_writ = _BinaryFileRead ($fh, $buffer, $sv_fileSize) $exit = 1 Else $buf_read = _BinaryFileRead ($fh, $buffer, $bufferlen) EndIf $av_InternetwriteFile = DllCall('wininet.dll', "int", "InternetwriteFile", "long", $ai_FTPopenfile[0], "ptr", DllStructGetPtr($buffer), "long", $bufferlen, "ptr", DllStructGetPtr($Outbytesread)) ;$buf_writ = _BinaryFileWrite($localfile, $buf) $sv_fileSize = $sv_fileSize - $bufferlen If $exit = 1 Then ExitLoop WEnd $v_Struct = 0 DllCall('wininet.dll', "int", "InternetCloseHandle", "long", $ai_FTPopenfile[0]) _APIFileClose ($fh) ;_APIFileClose($localfile) Return 0 EndFunc ;==>_FTPUploadFile ;;cache Functions Func _Navigate_Cache() $name = _GUICtrlListViewGetItemTextArray($hList, _GUICtrlListViewGetCurSel($hList)) $search = _ArraySearch($cacheNames, $LastDir & $name[1] & '/') If $search > 0 Then _GUICtrlListViewDeleteAllItems($hList) $LastDir = $LastDir & $name[1] & '/' _FtpSetCurrentDir($FTPconnect, $LastDir) $cachedata = $cache[$search] For $i = 4 To $cachedata[0] $nItem = GUICtrlCreateListViewItem($cachedata[$i], $hList) Next Return EndIf _FtpSetCurrentDir($FTPconnect, $LastDir & $name[1] & '/') _GetListcache($cache) _ArrayAdd($cacheNames, $LastDir & $name[1] & '/') $search = _ArraySearch($cacheNames, $LastDir & $name[1] & '/') If $search > 0 Then _GUICtrlListViewDeleteAllItems($hList) $cachedata = $cache[$search] For $i = 4 To $cachedata[0] $nItem = GUICtrlCreateListViewItem($cachedata[$i], $hList) Next EndIf $LastDir = $LastDir & $name[1] & '/' GUICtrlSetData($tdirs, $cachedata[2]) GUICtrlSetData($tsize, _Bytes_Convert($cachedata[1])) GUICtrlSetData($tfiles, $cachedata[3]) EndFunc ;==>_Navigate_Cache Func _GetListcache(ByRef $cachedata) Local $list $list = _ArrayCreate($list) $bytes = 0 $FolderList = _FTPFiles_and_Sizes_ListtoArray($FTPconnect, 1, $INTERNET_FLAG_RESYNCHRONIZE) If Not IsArray($FolderList) Then _ArrayAdd($list, 'No Items in Directory') Return $list EndIf _ArraySort($FolderList, 0, 1) For $i = 1 To $FolderList[0] _ArrayAdd($list, $FolderList[$i] & '|DIR') Next $FileList = _FTPFiles_and_Sizes_ListtoArray($FTPconnect, 2, $INTERNET_FLAG_RESYNCHRONIZE) _ArraySort($FileList, 0, 1) For $i = 1 To $FileList[0] $size = StringSplit($FileList[$i], '|') _ArrayAdd($list, $size[1] & '|' & _Bytes_Convert($size[2]) & '|' & $size[2]) $bytes = $bytes + $size[2] Next _ArrayInsert($list, 1, $bytes) _ArrayInsert($list, 2, $FolderList[0]) _ArrayInsert($list, 3, $FileList[0]) $list[0] = UBound($list) - 1 _ArrayAdd($cachedata, $list) EndFunc ;==>_GetListcache FTP_Explorer.zip Edited August 28, 2007 by bchris01 Assembly Code: fasmg . fasm . BmpSearch . Au3 Syntax Highlighter . Bounce Multithreading Example . IDispatchASMUDFs: Explorer Frame . ITaskBarList . Scrolling Line Graph . Tray Icon Bar Graph . Explorer Listview . Wiimote . WinSnap . Flicker Free Labels . iTunesPrograms: Ftp Explorer . Snipster . Network Meter . Resistance Calculator Link to comment Share on other sites More sharing options...
Golbez Posted August 28, 2007 Share Posted August 28, 2007 another bug.. i cant connect to my ftp by putting in: 67.80.194.73:1055 then my login and pass.. it just give me a connection error Link to comment Share on other sites More sharing options...
Beege Posted August 28, 2007 Author Share Posted August 28, 2007 another bug..i cant connect to my ftp by putting in: 67.80.194.73:1055 then my login and pass.. it just give me a connection errorI Think thats bacause the FTP Port is set to 21. Try changing line 228 to $conn = _FTPConnect ($XBOX, GUICtrlRead($IP), GUICtrlRead($Userbox), GUICtrlRead($Passbox), 1055)then just put 67.80.194.73 into the server box. Assembly Code: fasmg . fasm . BmpSearch . Au3 Syntax Highlighter . Bounce Multithreading Example . IDispatchASMUDFs: Explorer Frame . ITaskBarList . Scrolling Line Graph . Tray Icon Bar Graph . Explorer Listview . Wiimote . WinSnap . Flicker Free Labels . iTunesPrograms: Ftp Explorer . Snipster . Network Meter . Resistance Calculator Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now