microera Posted July 24, 2009 Share Posted July 24, 2009 Hi How to get name of the file (last created file) in (specified) directory? Thanks Link to comment Share on other sites More sharing options...
picaxe Posted July 24, 2009 Share Posted July 24, 2009 Try this Link to comment Share on other sites More sharing options...
microera Posted July 24, 2009 Author Share Posted July 24, 2009 HI Thanks for quick answer! Very good forum..... I'm new.... .... ERROR: can't open include file <_FileListToArrayFaster1f.au3> Where is _FileListToArrayFaster1f.au3 located? Thanks! Link to comment Share on other sites More sharing options...
bogQ Posted July 24, 2009 Share Posted July 24, 2009 (edited) #include <Array.au3> Global $time $search = FileFindFirstFile("*.*") If $search = -1 Then MsgBox(0, "Error", "No files/directories matched the search pattern") Exit EndIf While 1 $file = FileFindNextFile($search) If @error Then ExitLoop If StringInStr($file,".") Then $t = FileGetTime($file, 1,1) If $time = "" Then $time = $t&"\"&$file Else $time = $time&"/"&$t&"\"&$file EndIf EndIf WEnd $array = StringSplit($time,"/") _ArrayDelete($array,0) _ArraySort($array,1) _ArrayDisplay($array) FileClose($search) try this, hope that i didnt made some error in code, if i did sry reedited code and coment: on $array[0] shud b last created file with time and its name Edited July 24, 2009 by bogQ TCP server and client - Learning about TCP servers and clients connectionAu3 oIrrlicht - Irrlicht projectAu3impact - Another 3D DLL game engine for autoit. (3impact 3Drad related) There are those that believe that the perfect heist lies in the preparation.Some say that it’s all in the timing, seizing the right opportunity. Others even say it’s the ability to leave no trace behind, be a ghost. Link to comment Share on other sites More sharing options...
microera Posted July 24, 2009 Author Share Posted July 24, 2009 WOOOOWMAgic!Working!T H A N K S !! Link to comment Share on other sites More sharing options...
picaxe Posted July 25, 2009 Share Posted July 25, 2009 HI Thanks for quick answer! Very good forum..... I'm new.... .... ERROR: can't open include file <_FileListToArrayFaster1f.au3> Where is _FileListToArrayFaster1f.au3 located? Thanks! I don't know were that error comes from. I had in mind post 17 in that thread. For future reference here is the code I should have pointed to (Confirmed Ok with AutoIt v3.3.0.0)expandcollapse popup$path = 'C:\Temp' $Oldestfile = _GetNewestFile($path, 0, 1, 1) ; this is oldest modified (recursing subdirs) $Newestfile = _GetNewestFile($path, 0, 1) ; this is newest modified (recursing subdirs) If Not @error Then MsgBox(0, 'Newest & Oldest File', "Newest File = " & $Newestfile & @CRLF & "Oldest File = " & $Oldestfile) Else MsgBox(16, "Error", "Error occured:" & @CRLF & _ "@error = " & @error & @CRLF & _ "@extended = " & @extended) EndIf ; --------------------------------------- ; Function _GetNewestFile() ; Call with: _GetNewestFile($DirPath [, $DateType [, $Recurse] [, $Oldest]) ; Where: $DirPath is the directory to search ; $DateType (0ptional) is the type of date to use [from FileGetTime()]: ; 0 = Modified (default) ; 1 = Created ; 2 = Accessed ; $Recurse (Optional): If non-zero causes the search to be recursive. ; $Oldest (Optional): If non-zero find oldest file ; On success returns the full path to the newest file in the directory. ; On failure returns 0 and sets @error (see code below). ; --------------------------------------- Func _GetNewestFile($DirPath, $DateType = 0, $Recurse = 0, $Oldest = 0) Local $Found, $FoundRecurse, $FileTime Local $avNewest[2] = [0, ""]; [0] = time, [1] = file If StringRight($DirPath, 1) <> '\' Then $DirPath &= '\' If Not FileExists($DirPath) Then Return SetError(1, 0, 0) Local $First = FileFindFirstFile($DirPath & '*.*') If $First = -1 Or @error Then Return SetError(2, @error, 0) If $Oldest Then $avNewest[0] = FileGetTime($DirPath & FileFindNextFile($First), $DateType, 1) $avNewest[1] = $DirPath & FileFindNextFile($First) EndIf While 1 $Found = FileFindNextFile($First) If @error Then ExitLoop If StringInStr(FileGetAttrib($DirPath & $Found), 'D') Then If $Recurse Then $FoundRecurse = _GetNewestFile($DirPath & $Found, $DateType, 1, $Oldest) If @error Then ContinueLoop Else $Found = StringReplace($FoundRecurse, $DirPath, "") EndIf Else ContinueLoop EndIf EndIf $FileTime = FileGetTime($DirPath & $Found, $DateType, 1) If $Oldest Then If $FileTime < $avNewest[0] Then $avNewest[0] = $FileTime $avNewest[1] = $DirPath & $Found EndIf Else If $FileTime > $avNewest[0] Then $avNewest[0] = $FileTime $avNewest[1] = $DirPath & $Found EndIf EndIf WEnd If $avNewest[0] = 0 Then Return SetError(3, 0, 0) Else Return $avNewest[1] EndIf EndFunc ;==>_GetNewestFile Link to comment Share on other sites More sharing options...
nekkutta Posted July 25, 2009 Share Posted July 25, 2009 (edited) and I would have just done a $tempfile = @TempDir & "\" & Random(1000,9000,1) RunWait(@comspec & ' /c dir /b /a-d /o-d /tc *.* > ' & $tempfile , $workdir ,@SW_HIDE) $asArray = StringSplit(FileRead($tempfile),@CRLF,3) FileDelete($tempfile) all you need to do is set the working directory ($workdir) and your newest created file will be in ($asArray[0]) but I'm sure all of that other code is cleaner. EDIT: used Run instead of Runwait, D'oh Edited July 25, 2009 by nekkutta [size="2"] "Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." - Brian Kernighan[/size] Link to comment Share on other sites More sharing options...
microera Posted July 25, 2009 Author Share Posted July 25, 2009 @picaxe YES! Working OK with 3.3.0.0. and latest beta version! VERY GOOD! @nekkutta C:\Program Files\AutoIt3\Examples\tmp3.au3(2,77) : WARNING: $workdir: possibly used before declaration. RunWait(@comspec & ' /c dir /b /a-d /o-d /tc *.* > ' & $tempfile , $workdir , ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Program Files\AutoIt3\Examples\tmp3.au3(2,77) : ERROR: $workdir: undeclared global variable. RunWait(@comspec & ' /c dir /b /a-d /o-d /tc *.* > ' & $tempfile , $workdir , ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Program Files\AutoIt3\Examples\tmp3.au3 - 1 error(s), 1 warning(s) Thanks to all! Link to comment Share on other sites More sharing options...
nekkutta Posted July 25, 2009 Share Posted July 25, 2009 @nekkuttaC:\Program Files\AutoIt3\Examples\tmp3.au3(2,77) : WARNING: $workdir: possibly used before declaration.RunWait(@comspec & ' /c dir /b /a-d /o-d /tc *.* > ' & $tempfile , $workdir ,~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^C:\Program Files\AutoIt3\Examples\tmp3.au3(2,77) : ERROR: $workdir: undeclared global variable.RunWait(@comspec & ' /c dir /b /a-d /o-d /tc *.* > ' & $tempfile , $workdir ,~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^C:\Program Files\AutoIt3\Examples\tmp3.au3 - 1 error(s), 1 warning(s)Thanks to all!Like I said, you need to set $workdir ie. $workdir = FileSelectFolder("","",0,"") [size="2"] "Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." - Brian Kernighan[/size] Link to comment Share on other sites More sharing options...
microera Posted July 25, 2009 Author Share Posted July 25, 2009 How to display filename? In bellow example $asArray isn't visible! (or filename maybe blank?) ? $workdir = FileSelectFolder("Choose a folder!", "") $tempfile = @TempDir & "\" & Random(1000,9000,1) MsgBox(4096, "Result", $tempfile) Sleep(2000) RunWait(@comspec & ' /c dir /b /a-d /o-d /tc *.* > ' & $tempfile , $workdir ,@SW_HIDE) $asArray = StringSplit(FileRead($tempfile),@CRLF,3) MsgBox(4096, "Result", $asArray) FileDelete($tempfile) Link to comment Share on other sites More sharing options...
microera Posted July 25, 2009 Author Share Posted July 25, 2009 Sorry! my mistake! MsgBox(4096, "Result", $asArray[0]) VEERY GOOD! Link to comment Share on other sites More sharing options...
picaxe Posted July 25, 2009 Share Posted July 25, 2009 You might want to avoid usingRunWait(@comspec & ' /c dir /b /a-d /o-d /tc *.* > ' & $tempfile , $workdir ,@SW_HIDE)because it will not find windows filenames that contain special characters (even for English). See this post and thread for more info. Link to comment Share on other sites More sharing options...
microera Posted September 21, 2009 Author Share Posted September 21, 2009 #include <Array.au3> Global $time $search = FileFindFirstFile("*.*") If $search = -1 Then MsgBox(0, "Error", "No files/directories matched the search pattern") Exit EndIf While 1 $file = FileFindNextFile($search) If @error Then ExitLoop If StringInStr($file,".") Then $t = FileGetTime($file, 1,1) If $time = "" Then $time = $t&"\"&$file Else $time = $time&"/"&$t&"\"&$file EndIf EndIf WEnd $array = StringSplit($time,"/") _ArrayDelete($array,0) _ArraySort($array,1) _ArrayDisplay($array) FileClose($search) try this, hope that i didnt made some error in code, if i did sry reedited code and coment: on $array[0] shud b last created file with time and its name If you repeat above procedure you get wrong (doubled files) ..... Why? Please test with copyed code again or make function and run it twice! Link to comment Share on other sites More sharing options...
bogQ Posted September 22, 2009 Share Posted September 22, 2009 (edited) If you repeat above procedure you get wrong (doubled files) ..... Why?Please test with copyed code again or make function and run it twice!dont see the point, if you dont post your code with this bug then i will not know where it isprobably after every func call youl need to do $time = "" to clean it and $array, but until you dont post your code i will newer know if im correct about it. Edited September 22, 2009 by bogQ TCP server and client - Learning about TCP servers and clients connectionAu3 oIrrlicht - Irrlicht projectAu3impact - Another 3D DLL game engine for autoit. (3impact 3Drad related) There are those that believe that the perfect heist lies in the preparation.Some say that it’s all in the timing, seizing the right opportunity. Others even say it’s the ability to leave no trace behind, be a ghost. Link to comment Share on other sites More sharing options...
microera Posted September 22, 2009 Author Share Posted September 22, 2009 dont see the point, if you dont post your code with this bug then i will not know where it isprobably after every func call youl need to do $time = "" to clean it and $array, but until you dont post your code i will newer know if im correct about it.HiYEES! $time = "" do the job!ALL IS OK!p.sas I say: if EXACTLY repeat code twice this errors accoure..... but after $time="" in begining all is OK! Thanks again! 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