Jump to content

Recommended Posts

Posted

Is there anybody can help me I placed this code in a program before I exit the program when ended the program

FileDelete(@TempDir & "\Test.ini")

FileDelete (@TempDir & "\English.lng")

DirRemove (@TempDir & "\Test",1)

Exit

When I run my code and when I Exit the code I want this to work.. Sometimes it works but not every time why ?

Posted

Is there anybody can help me I placed this code in a program before I exit the program when ended the program

FileDelete(@TempDir & "\Test.ini")

FileDelete (@TempDir & "\English.lng")

DirRemove (@TempDir & "\Test",1)

Exit

When I run my code and when I Exit the code I want this to work.. Sometimes it works but not every time why ?

Try with @error to see if you get an error.

Posted

Try

While Not FileDelete(@TempDir & "\Test.ini")
    Sleep(100)
WEnd
While Not FileDelete(@TempDir & "\English.lng")
    Sleep(100)
WEnd
While Not DirRemove (@TempDir & "\Test",1)
    Sleep(100)
WEnd

Posted (edited)

Thanks Andreik

I have try the @Error but I have no error and it still not working.

Do a simple test. Check with FileExists() if the file exist.

And then something like this:

While FileExists(@TempDir & "\Test.ini") Then
FileDelete(@TempDir & "\Test.ini")
Wend

EDIT:

Or you can use DOS:

#include <Process.au3>
_RunDOS('del "' & @TempDir & '\Test.ini' & '"')

Hope that helps and work fine. :)

Edited by Andreik
Posted

Thanks Picaxe

I have try but first time it works but when I run second time it not works that freese and I must open taskmanager and stop the process

Posted (edited)

Ok I should have put in some proper error checking and a timeout, try this

$sDir = @TempDir
$sFiles = "Test.ini,English.lng,\Test"
$aFiles = StringSplit($sFiles, ",")
For $j = 1 To $aFiles[0]
    $i = 50
    While $i > 0
        If StringLeft($aFiles[$j], 1) = "\" Then
            If DirRemove($sDir & $aFiles[$j]) Then ExitLoop
            If FileExists($sDir & $aFiles[$j] & "\*.*") Then
                If Not FileDelete($sDir & $aFiles[$j] & "\*.*") Then
                    MsgBox(262160, "Delete Error", "Error deleting files in folder " & $aFiles[$j])
                    ExitLoop
                EndIf
            EndIf
        Else
            If FileDelete($sDir & '\' & $aFiles[$j]) Then ExitLoop
        EndIf
        Sleep(100)
        $i -= 1
        If $i = 0 Then
            MsgBox(262160, "Delete Error", "Error deleting " & $aFiles[$j] & "  @error=" & @error)
            ExitLoop
        EndIf
    WEnd
Next
Either a file must still be open or being accessed by your AutoIt app or some other app or folder Test is not empty.

Edited by picaxe
  • 3 years later...
Posted

I am also struggling with this

I am writing a program that keeps a directory size below a limit by deleting the oldest file:

while dirgetsize($targetdir) > $max

find the oldest file $fold

filedelete($fold)

wend

the oldest file does not get deleted this way, it is still there.

I checked attributes.

Why is this such a problem ? Anybody has a suggestion ?

  • Moderators
Posted

silver217,

Can you please post the full code you have tried - your logic seems fine so it might be a syntax problem. :D

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Posted (edited)

I don't know how to put code in this forum as a popup so here it is as text:

While 1
    dodir($targetdir)
    tolog("=====================================================")
    tolog('fold = ' & $fold)
    $d = InputBox('Delete ?', $fold & @CRLF & $attrib & @CRLF & $tz)
    If $d <> 1 Then
        Exit
    Else
        tolog($attrib)
        If $attrib = ' Directory' Then
;           DirRemove($fold)
        Else
            While Not FileDelete($fold)
                Sleep(100)
            WEnd
        EndIf
    EndIf
WEnd
; log_to_screen()
Exit

Func dodir($p)
    FileChangeDir($p)
    ;tolog("dir: " & @WorkingDir)
    $search = FileFindFirstFile("*.*")
    If $search = -1 Then
        ;   tolog("   Empty dir !")
        ;   Exit
        ;   EndIf
    Else
        While 1
            $file = FileFindNextFile($search)
            If @error Then ExitLoop
            ;   tolog($file)
            If StringInStr(FileGetAttrib($file), "S") Or StringInStr(FileGetAttrib($file), "H") Or StringInStr(FileGetAttrib($file), "D") Then
                ;       tolog("S H or Dir: " & $file)
            EndIf
            If StringInStr(FileGetAttrib($file), "D") Then gosub($file)
            $t = FileGetTime($file, 0, 1) ; date modified = 0
            If $t < $oo Then
                $oo = $t
                $fold = $p & '' & $file
            EndIf
        WEnd
    EndIf
    FileClose($search)
    ;tolog("dir: " & @WorkingDir)
    ;tolog("--------------------------------------------------------")

    $attrib = FileGetAttrib($fold)
    If @error Then
        ;   tolog('Error: Could not obtain attributes of oldest file: ' & $fold)
    Else
        $input = StringSplit("R,A,S,H,N,D,O,C,T", ",")
        $output = StringSplit("Read-only /, Archive /, System /, Hidden /" & _
                ", Normal /, Directory /, Offline /, Compressed /, Temporary /", ",")
        For $i = 1 To 9
            $attrib = StringReplace($attrib, $input[$i], $output[$i], 0, 1)
            ; last parameter in StringReplace means case-sensitivity
        Next
        $attrib = StringTrimRight($attrib, 2) ;remove trailing slash
        ;   tolog("oldest: " & $fold & ", attributes: " & $attrib)
    EndIf
EndFunc   ;==>dodir

Func gosub($sub)
    ;tolog('subdir: ' & $sub)
    $oldwd = @WorkingDir
    dodir(@WorkingDir & "" & $sub)
    FileChangeDir($oldwd)
EndFunc   ;==>gosub
Edited by silver217
  • Moderators
Posted

silver217,

I don't know how to put code in this forum as a popup

You put [autoit] before and [/autoit] after your code - which I am looking at now. :D

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

  • Moderators
Posted

silver217,

I am not debugging that code - it is incomplete and I hate debugging recursive calls to FileFindFirst/NextFile. Please read the Recursion tutorial in the Wiki to see why - and to find out a better way to do it. :oops:

Here is a function I just threw together using my RecFileListToArray UDF (look in my sig for the link). I have tested it a few times and it seems to work fine:

#include <RecfileListToArray.au3>
#include <Array.au3>

; Set the root path
$sRoot = "N:Sizer"

; Get a list of files including in subdirs with full path
$aFileList = _RecFileListToArray($sRoot, "*", 1, 1, 0, 2)
; Now create an array of the filetimes and fill it
Global $aTimes[$aFileList[0] + 1] = [$aFileList[0]]
For $i = 1 To $aFileList[0]
    $aTimes[$i] = Number(FileGetTime($aFileList[$i], 0, 1))
Next

; Just for testing
_ArrayDisplay($aFileList, "Start")
_ArrayDisplay($aTimes, "Start")

; This is the folder size at the start
MsgBox(0, "Initial Size", DirGetSize($sRoot))

; Set a suitable size here
While DirGetSize($sRoot) > 20000000

    ; Reset the initial values
    $iOldest = 99999999999999
    $sOldest = ""
    $iIndex = 0
    ; Now go through the times to find the oldest
    For $i = 1 To $aTimes[0]
        If $aTimes[$i] < $iOldest Then
            $iOldest = $aTimes[$i]
            $sOldest = $aFileList[$i]
            $iIndex = $i
        EndIf
    Next
    ; And delete the file
    FileDelete($sOldest)
    ; Make sure it has gone
    Do
        Sleep(10)
    Until Not FileExists($sOldest)
    ; And remove it from the arrays
    _ArrayDelete($aFileList, $iIndex)
    $aFileList[0] -= 1
    _ArrayDelete($aTimes, $iIndex)
    $aTimes[0] -= 1

    ; Just to check
    _ArrayDisplay($aFileList, "In loop")

WEnd

; And this is the folder size at the end
MsgBox(0, "Final Size", DirGetSize($sRoot))

It should not be too hard to amend it to fit your script, but do come back if you run into problems. :D

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

  • Moderators
Posted (edited)

silver217,

I did tell you in the post above: :oops:

my RecFileListToArray UDF (look in my sig for the link)

Or you can go directly to it by clicking here. :D

M23

Edit: Added direct link. :rip:

Edited by Melba23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...