grasshopper3 1 Posted May 3, 2010 Hi, I am trying to create a script that will be able to access multiple ftp sites and scan for files that have been modified in the last 24 hours then logs to an csv file. I have been able to find code that allows you to search through directories in windows explorer without the ftp. I have tried to modify this code to enable me to search through ftp files, but i am having trouble. Can someone help. Below is the code that I have so far. This $list is a comma delimited list. expandcollapse popupScanRootFTP($list) Func ScanRootFTP($DistrictList) Local $FileArray,$FullFilePath, $DistrictArray, $i = 1, $hSearch $DistrictArray = StringSplit($DistrictList, ",") ;~ _ArrayDisplay($DistrictArray) While $i <= UBound($DistrictArray)- 1 ;~ MsgBox(0,'$DistrictArray[$i]',$DistrictArray[$i]) $FileArray = _FTP_FindFileFirst($Conn, $DistrictArray[$i], $hSearch) ;~ _ArrayDisplay($FileArray) IF $FileArray[0] = 0 Then ExitLoop EndIf $FullFilePath = "/" & $DistrictArray[$i] & '/' & $FileArray[10] ;~ MsgBox(0,'$FullFilePath',$FullFilePath) If $FileArray[1] = 16 Then ;~ ScanFolders($FullFilePath, $DistrictArray[$i]) Else ;~ eMailBody($FullFilePath) ;~ csvFile($FullFilePath, $FileArray[10], $DistrictArray[$i]) EndIf While 1 $FileArray = _FTP_FindFileNext($hSearch) IF $FileArray[0] = 0 Then ExitLoop EndIf $FullFilePath = "/" & $DistrictArray[$i] & '/' & $FileArray[10] If $FileArray[1] = 16 Then ;~ ScanFolders($FullFilePath, $DistrictArray[$i]) Else ;~ eMailBody($FullFilePath) ;~ csvFile($FullFilePath, $FileArray[10], $DistrictArray[$i]) EndIf WEnd $i += 1 ;~ _FTP_FindFileClose($h_Handle) WEnd _FTP_FindFileClose($h_Handle) Return EndFunc Func ScanFolders($SourceFolder, $DistrictName) Local $FileArray,$FullFilePath, $hSearch ;~ MsgBox(0,'$SourceFolder',$SourceFolder) $FileArray = _FTP_FindFileFirst($Conn, $SourceFolder & "/*", $hSearch) ;~ _ArrayDisplay($FileArray) $FullFilePath = $SourceFolder & "/" & $FileArray[10] MsgBox(0,'\$FullFilePath',$FullFilePath) If $FileArray[1] = 16 Then ScanFolders($FullFilePath, $DistrictName) Else ;~ eMailBody($FullFilePath) ;~ csvFile($FullFilePath, $FileArray[10], $DistrictName) EndIf While 1 $FileArray = _FTP_FindFileNext($hSearch) IF $FileArray[0] = 0 Then ExitLoop EndIf $FullFilePath = $SourceFolder & "/" & $FileArray[10] MsgBox(0,'\$FullFilePath',$FullFilePath) If $FileArray[1] = 16 Then ScanFolders($FullFilePath, $DistrictName) Else ;~ eMailBody($FullFilePath) ;~ csvFile($FullFilePath, $FileArray[10], $DistrictName) EndIf WEnd _FTP_FindFileClose($h_Handle) Return EndFunc Share this post Link to post Share on other sites
grasshopper3 1 Posted May 3, 2010 I think that I have narrowed the problem down to this line... $FileArray = _FTP_FindFileFirst($Conn, $DistrictArray[$i], $hSearch) I can get it to read through the first directory and its sub-dir from my comma list, but it seems un-able to correctly get the first file from the second dir in the comma list. _FTP_FindFileFirst($Conn, $DistrictArray[1], $hSearch) ----WORKS! _FTP_FindFileFirst($Conn, $DistrictArray[2], $hSearch) ----DOESN'T WORK! I did a _ArrayDisplay on $DistrictArray[2] and I am not sure what the results mean. Please interpret... [0]|0x00000000 ----What does this mean? [1]|0x00CC0008 ----What does this mean? [2]|az-meza ----I know that [2] is the dir name. [3]|0x01D7FD30 ----What does this mean? [4]|0 [5]|0 Share this post Link to post Share on other sites
grasshopper3 1 Posted May 3, 2010 Solved my own problem. Here is my solution in case someone else wants to do it. expandcollapse popupFunc ScanRootFTP($DistrictList, $Conn) Local $FileArray,$FullFilePath, $DistrictArray, $i = 1, $hSearch $DistrictArray = StringSplit(StringStripWS($DistrictList,8), ",") While $i <= UBound($DistrictArray)- 1 $FileArray = _FTP_FindFileFirst($Conn, $DistrictArray[$i], $hSearch) IF $FileArray[0] = 0 or @error = -1 Then _FTP_FindFileClose($hSearch) $i += 1 Else $FullFilePath = "\" & $DistrictArray[$i] & '\' & $FileArray[10] If $FileArray[1] = 16 Then ScanFolders($FullFilePath, $DistrictArray[$i]) Else ;~ eMailBody($FullFilePath) ;~ csvFile($FullFilePath, $FileArray[10], $DistrictArray[$i]) EndIf While 1 $FileArray = _FTP_FindFileNext($hSearch) IF $FileArray[0] = 0 Then _FTP_FindFileClose($hSearch) ExitLoop EndIf $FullFilePath = "\" & $DistrictArray[$i] & '\' & $FileArray[10] If $FileArray[1] = 16 Then ScanFolders($FullFilePath, $DistrictArray[$i]) Else ;~ eMailBody($FullFilePath) csvFile($FullFilePath, $FileArray[10], $DistrictArray[$i]) EndIf WEnd $i += 1 _FTP_FindFileClose($hSearch) EndIf WEnd _FTP_FindFileClose($hSearch) Return EndFunc Share this post Link to post Share on other sites
grasshopper3 1 Posted May 3, 2010 Alright new question. How do I get the modified dates for ftp files? When I use "_FTP_FindFileFirst()" the date fields that are returned are "0". I am not sure what parameters to pass in for "_FTP_FileTimeLoHiToStr()". Can someone post some code examples or send me in the right direction? Thanks Share this post Link to post Share on other sites