Hi,
Hi,
I've written a function that recurses a folder deleting files and folders (modified posting by theChange). Blitz+ Deleteing commands seem rather bugged. The routine simply scans for folders and files producing a list of files and a list of folders. Once the lists are produced, it deletes the files first. It is then supposed to delete the folders. The folder list is produced in the order so that a sub folder is never exists in the folder when DeleteDir() is called.
What I end up with is a few scattered files left over and folders that dont get deleted. Sure it does some of them. Under windows xp explorer I can press delete and they delete instantly, no read only warning or permissions issue. The lists that are produced are correct but the DeleteFile() and DeleteDir() functions seem bugged.
Appreciate if anyone would test this out. By the way, will Blitz+ delete readonly files and folders?
[CODE]
; #########################################
;
; F O L D E R R E M O V E R
;
; #########################################
; ---------------- TYPES -----------------
; File List
Type List
Field FileName$
End Type
; Directory List
Type DList
Field FileName$
End Type
; ---------------- TYPES -----------------
Global Files.List
Global Folders.DList
; ------------- MAIN PROGRAM -------------
ScanDir "C:\MyFolder" ; Scan Folder
Files.DList = First List
For Files.List = Each List ; Delete files
DebugLog(Files\FileName)
DeleteFile(Files\FileName)
Next
Folders.DList = First DList
For Folders.DList = Each DList ; Delete Folders
DebugLog(Folders\FileName)
DeleteDir(Folders\FileName)
Next
WaitKey()
End
; ----------- FUNCTIONS ----------------
Function ScanDir ( Dir$ )
;Print Dir ; Uncomment to see the directories being scanned
If Right ( Dir , 1 ) = "\" ; Dirspec trailing backslash
Dir = Left ( Dir , Len ( Dir ) - 1 )
End If
;- Directory scan
Local DirHandle = ReadDir ( Dir )
Local FileName$
Repeat
FileName = NextFile ( DirHandle )
If FileName <> ""
If FileName <> "." If FileName <> ".."
If FileType ( Dir + "\" + FileName ) = 2
; It's a directory!
Folders = New DList
; Inserts at front to ensure order is correct for deleting
Insert Folders Before First DList
; Add it to folder list
Folders\FileName = Dir + "\" + FileName
; Scan that folder
ScanDir Folders\Filename ; Go down one level
Else
; Its a file
Files = New List
; Add file to file list
Files\FileName = Dir + "\" + FileName
End If
End If
End If
Until FileName = "" ; No more files
CloseDir(Dir)
End Function
[/CODE]
Thanks
Sin
Hi,
I've written a function that recurses a folder deleting files and folders (modified posting by theChange). Blitz+ Deleteing commands seem rather bugged. The routine simply scans for folders and files producing a list of files and a list of folders. Once the lists are produced, it deletes the files first. It is then supposed to delete the folders. The folder list is produced in the order so that a sub folder is never exists in the folder when DeleteDir() is called.
What I end up with is a few scattered files left over and folders that dont get deleted. Sure it does some of them. Under windows xp explorer I can press delete and they delete instantly, no read only warning or permissions issue. The lists that are produced are correct but the DeleteFile() and DeleteDir() functions seem bugged.
Appreciate if anyone would test this out. By the way, will Blitz+ delete readonly files and folders?
[CODE]
; #########################################
;
; F O L D E R R E M O V E R
;
; #########################################
; ---------------- TYPES -----------------
; File List
Type List
Field FileName$
End Type
; Directory List
Type DList
Field FileName$
End Type
; ---------------- TYPES -----------------
Global Files.List
Global Folders.DList
; ------------- MAIN PROGRAM -------------
ScanDir "C:\MyFolder" ; Scan Folder
Files.DList = First List
For Files.List = Each List ; Delete files
DebugLog(Files\FileName)
DeleteFile(Files\FileName)
Next
Folders.DList = First DList
For Folders.DList = Each DList ; Delete Folders
DebugLog(Folders\FileName)
DeleteDir(Folders\FileName)
Next
WaitKey()
End
; ----------- FUNCTIONS ----------------
Function ScanDir ( Dir$ )
;Print Dir ; Uncomment to see the directories being scanned
If Right ( Dir , 1 ) = "\" ; Dirspec trailing backslash
Dir = Left ( Dir , Len ( Dir ) - 1 )
End If
;- Directory scan
Local DirHandle = ReadDir ( Dir )
Local FileName$
Repeat
FileName = NextFile ( DirHandle )
If FileName <> ""
If FileName <> "." If FileName <> ".."
If FileType ( Dir + "\" + FileName ) = 2
; It's a directory!
Folders = New DList
; Inserts at front to ensure order is correct for deleting
Insert Folders Before First DList
; Add it to folder list
Folders\FileName = Dir + "\" + FileName
; Scan that folder
ScanDir Folders\Filename ; Go down one level
Else
; Its a file
Files = New List
; Add file to file list
Files\FileName = Dir + "\" + FileName
End If
End If
End If
Until FileName = "" ; No more files
CloseDir(Dir)
End Function
[/CODE]
Thanks
Sin