Ich habe im forum einen Code gefunden, um Dateien in den Papierkorb zu schieben anstelle zu löschen. Den Code habe ich ein wenig "flexibler" gestaltet. Nach einigen Tests (auch mit dem original-Code) ist mir aufgefallen, das diese Funktion (SHFileOperation_) oft den Dienst verweigert. Der Grund ist mir nicht bewusst. Die Dateien sind weder ReadOnly noch sonstwas. Teilweise funktioniert es beim 2. Durchlauf.
Jemand eine Idee?
Hier die Proc:
Code: Alles auswählen
Procedure SK_RecycleFile(file$, ask.b=0, noerror.b=0, progress.b=0) ; PB3+4
Define.l result
; #define FOF_SILENT 0x0004 // keine Angabe über
; // Fortschritt
; #define FOF_NOERRORUI 0x0400 // keine Fehler-UI
; #define FOF_ALLOWUNDO 0x0040 // für Papierkorb
; // erforderlich!
; #define FOF_NOCONFIRMATION 0x0010 // keine Rückfrage
SHFileOp.SHFILEOPSTRUCT
SHFileOp\pFrom=@file$
SHFileOp\wFunc=#FO_DELETE
SHFileOp\fFlags=#FOF_ALLOWUNDO
If ask=0
SHFileOp\fFlags | #FOF_NOCONFIRMATION
EndIf
If noerror=0
SHFileOp\fFlags | $0400
EndIf
If progress=0
SHFileOp\fFlags | #FOF_SILENT
EndIf
result = SHFileOperation_(SHFileOp)
CompilerIf 1
Debug "SK_Recyclefile: "+file$
Debug "SK_Recyclefile: Result = "+Str(result)
CompilerEndIf
; Liefert 0 (NULL) zurück wenn alles ok
; 1026 : Datei nicht vorhanden
If result = 0
result = #True
Else
result = #False
EndIf
ProcedureReturn result
EndProcedure
Code: Alles auswählen
Structure DirInfo
entryname$
entrysize.f
entrydate.l
entryattribute.l
EndStructure
NewList ReadAllFiles.DirInfo()
Procedure.l SK_ReadAllFiles(Path.s)
; Structure DirInfo
; entryname$
; entrysize.f
; entrydate.l
; entryattribute.l
; EndStructure
; NewList ReadAllFiles.DirInfo()
Shared ReadAllFiles()
If Right(Path,1)<>"\" : Path+"\" : EndIf
Dir.l=ExamineDirectory(#PB_Any, Path, "")
If Dir
While NextDirectoryEntry(Dir)
If DirectoryEntryType(Dir)=1 ; File
ReadDir_found + 1
name$=DirectoryEntryName(Dir)
AddElement(ReadAllFiles())
ReadAllFiles()\entryname$=Path+name$
ReadAllFiles()\entrydate=DirectoryEntryDate(Dir, #PB_Date_Modified)
ReadAllFiles()\entrysize=DirectoryEntrySize(Dir)
ReadAllFiles()\entryattribute=DirectoryEntryAttributes(Dir)
ElseIf DirectoryEntryType(Dir) = 2 ; Dir
name$=DirectoryEntryName(Dir)
If name$<>"." And name$<>".."
ReadDir_found + SK_ReadAllFiles(Path+DirectoryEntryName(Dir))
EndIf
EndIf
Wend
FinishDirectory(Dir)
EndIf
ProcedureReturn ReadDir_found
EndProcedure