Italia
Foro

Verzeichnis mit allem enthaltenen File und Unterverzeichnissen (restlos) löschen

 
- Page 1 -



Julian
Schmidt
Wie kann man ein Verzeichnis am elegantesten mit allen Unterverzeichnissen und allem enthaltenen File löschen?
 
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
24.07.2011  
 



« Dieser Beitrag wurde als Lösung gekennzeichnet. »

- Page 3 -



Dieter
Zornow
Warum nimmst du nicht einfach die API zum löschen. Hier ist ein flexibler Code per Löschen, Kopieren Umbenennen und Bewegen. Je nach Parameter kannst du in den Papierkorb oder auch nicht löschen, ganz wie du willst. Das erspart doch den ganzen Hickhack und arbeitet zuverlässig. Im Beispiel wird ohne Nachfrage ein Verzeichnis mit Unterverzeichnissen nicht in den Papierkorb gelöscht
' Parameter 1: Auszuführende Operation=COPY, DELETE, RENAME, MOVE
' Parameter 2: Quelldatei(en)
' Parameter 3: Zielldatei(en)
' Parameter 4: 0 = Benutzer fragen, 1= ohne Nachfrage löschen
' Parameter 5: 0 = In Papierkorb verschieben, 1= "endgültig" löschen
' Parameter 6: 0 = Abbrechen bei vorhandener File, 1 = Kopie der File anlegen

Proc SHFileoperation

    Parameters operation$,File$,File2$,confirm%,recycle%,can%
    Declare opstruct#,file#,file2#,title#,operation&
    Var FOF_Flag% = 1 | 512 |  2048'FOF_MULTIDESTFILES,FOF_NOCONFIRMMKDIR,FOF_NOCOPYSECURITYATTRIBS
    Dim title#,24
    string title#,0 = "Fileoperation Progress"

    Select upper$(operation$)

        CaseOf "RENAME"

        operation&=4

        CaseOf "COPY"

        operation&=2

        CaseOf "MOVE"

        operation&=1

        CaseOf "DELETE"

        operation&=3

    endselect

    case confirm%:confirm%=16
    Casenot recycle%:recycle%=64

    If can%

        FOF_Flag% = FOF_Flag% | confirm% | recycle% | $20 | 8'$20 = FOF_WANTMAPPINGHANDLE 8 = FOF_RENAMEONCOLLISION

    Else

        FOF_Flag% = FOF_FLAG% | confirm% | recycle%'16 = FOF_NOCONFIRMATION,64 = FOF_ALLOWUNDO

    endif

    Dim opstruct#,30:Dim file#,(Len(file$)+2):Dim file2#,(Len(file2$)+2)
    String file#,0=(file$+Chr$(0)):String file2#,0=(file2$+Chr$(0))
    Long opstruct#,0=GetActiveWindow()' Handle des aufrufenden Fensters
    Long opstruct#,4=operation&'Welche Dateioperation gemacht wird
    Long opstruct#,8=file#' pfrom : hier die File per die Operation
    Long opstruct#,12=file2#'pto hier die Zieldateinamen oder 0
    Word opstruct#,16=FOF_Flag%
    Long opstruct#,18=0'Bei abbruch steht hier 1 nur bei langen Operationen
    Long opstruct#,22=0' muss immer Null sein, hier wird handle per SHNameMappings gesetzt bei Kopie
    Long opstruct#,26=Title#'Überschrift des Fortschrittsdialogs bei langen Operationen
    Var FEHLER&=External("SHELL32","SHFileOperationA",opstruct#)

    IF (long(opstruct#,18)=1)

        MessageBox("Die Dateioperation wurde abgebrochen!","Abbruch durch Benutzer!",64)

    ELSEIF (Fehler& <> 0)

        MessageBox(str$(fehler&),"Es ist ein Fehler aufgetreten",16)

    EndIf

    If val($WinVer)> 5.0

        Case LONG(opstruct#,22) <> 0:External("Shell32","SHFreeNameMappings",LONG(opstruct#,22))'min XP

    endif

    Dispose file#,file2#,opstruct#,title#

EndProc

cls
SHFileoperation("Delete","c:\\Temp\\Test\\","",1,1,0)
print "fertig"
Waitinput
end
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
26.07.2011  
 



 
- Page 2 -



Julian
Schmidt
Jörg Sellmeyer (25.07.11)
Außerdem nützt Dir das hier:
case @GetDir$("@")=Pfad$ : AddFiles("*.*",h&,1)

nichts, um evtl. einen Fehler abzufangen, da Dein Programm so oder so weitermacht. Wenn, dann eine vernünftige iF-Abfrage in der Du auch eine Alternative programmierst. Also eine Messagebox "Falscher Pfad" oder sowas.


cls
delete_folder_completely("C:\\Test")
'delete_folder_completely(ChooseDir$("Verzeichnis wählen:"))

Proc delete_folder_completely

    Parameters Pfad$
    declare fehler%,z%,h&
    var addfiles.dll&=ImportDLL("addfiles.dll","")

    while 1

        if DirExists(Pfad$)

            h&=Create("List", 0)
            Chdir Pfad$

            if @GetDir$("@")=Pfad$

                AddFiles("*.*",h&,1)
                MoveListToHandle(h&)

                whileloop GetCount(h&)

                    if Left$(GetString$(h&,&loop-1),Len(Pfad$))=Pfad$

                        if FileExists(GetString$(h&,&loop-1))

                            Erase GetString$(h&,&loop-1)

                            if FileExists(GetString$(h&,&loop-1))

                                Messagebox("Die File '"+GetString$(h&,&loop-1)+"' konnte nicht gelöscht werden!","ERROR",16)
                                fehler%=fehler%+1

                            Endif

                        Endif

                    Endif

                Endwhile

                clearlist h&
                Chdir Pfad$

                if @GetDir$("@")=Pfad$

                    AddDirs("*.*",h&,1)

                    whileloop GetCount(h&),1,-1

                        if Left$(GetString$(h&,&loop-1),Len(Pfad$))=Pfad$

                            if DirExists(GetString$(h&,&loop-1))

                                RmDir GetString$(h&,&loop-1)

                                if DirExists(GetString$(h&,&loop-1))

                                    Messagebox("Das Verzeichnis '"+GetString$(h&,&loop-1)+"' konnte nicht gelöscht werden!","ERROR",16)
                                    fehler%=fehler%+1

                                Endif

                            Endif

                        Endif

                    Endwhile

                    if @GetDir$("@")=Pfad$

                        if DirExists(Pfad$)

                            RmDir Pfad$

                            if DirExists(Pfad$)

                                Messagebox("Das Verzeichnis '"+Pfad$+"' konnte nicht gelöscht werden!","ERROR",16)
                                fehler%=fehler%+1

                            Endif

                        Endif

                    else

                        Messagebox("Der Pfad '"+Pfad$+"' konnte nicht geöffnet werden!","ERROR",16)

                    Endif

                else

                    Messagebox("Der Pfad '"+Pfad$+"' konnte nicht geöffnet werden!","ERROR",16)

                Endif

            else

                Messagebox("Der Pfad '"+Pfad$+"' konnte nicht geöffnet werden!","ERROR",16)

            Endif

        else

            Messagebox("Der Pfad '"+Pfad$+"' ist nicht vorhanden","ERROR",16)

        Endif

        if fehler%=0

            break

        else

            z%=Messagebox("Das Löschen des Ordnes '"+Pfad$+"' war nicht erfolgreich! Wollen Sie es Wiederholen?","INFO",5+64+256+4096)

            if z%=4

                fehler%=0

            else

                break

            Endif

        Endif

    Endwhile

    destroywindow(h&)
    FreeDLL addfiles.dll&

EndProc


Jörg Sellmeyer (25.07.11)
Du springst mit ChDir in den Ordner rein. Es kann gut sein, daß dieser dadurch blockiert wird und Du erst löschen kannst, wenn Du wieder aus dem Ordner rausgehst: ChDir ".."


Wie potuto ich sowas in den Code einbeziehen?

iF (25.07.11)
Warum eine File/ Ordner sich nicht entfernen lässt... irgend ein Prozess wird halt noch am oder im Verzeichnis rumwuseln und ein Handle halten - vlt. der Explorer der an seiner versteckten thumbs.db klebt oder ein AV-Programm oder ein Indizierungsdienst


Das habe ich bereits vermutet! Ich habe deswegen versucht den Ordner freizugeben, den Computer neugestartet, Explorer.exe beendet. Danach ging es, wie zuvor ebenfalls nicht! Anschließend habe ich circa Unlocker überprüft ob ein Prozess den Ordner verwendet. Der Sagte mir das er nicht in Verwendung ist! Nach einem weiteren Test des Löschens ging es wieder nicht. Liegt etwa am Quellcode, bzw. an RmDir? Oder weil XProfan selbst diesen Ordner blockiert.

iF (25.07.11)
oder oder oder... nutze testweise die addFiles.DLL wie im Beispiel auch mal per external statt per importdll um auch auszuschließen ob ich da vergessen habe ein Handle zu schließen.


Muss ich die DLL davor noch iwie einbinden [UseDLL oder so?]?
 
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
25.07.2011  
 



Nein, einfach nur External.
 
25.07.2011  
 




Julian
Schmidt
Über den Aufruf circa External kommt wiederum eine Fehlermeldung.
Liegt es vlt daran das Io l' kompletten Pfad zur DLL angeben muss?
delete_folder_completely("C:\\Test")
'delete_folder_completely(ChooseDir$("Verzeichnis wählen:"))

Proc delete_folder_completely

    Parameters Pfad$
    declare fehler%,z%,h&
    'var addfiles.dll&=ImportDLL("addfiles.dll","")

    while 1

        if DirExists(Pfad$)

            h&=Create("List", 0)
            Chdir Pfad$

            if @GetDir$("@")=Pfad$

                'AddFiles("*.*",h&,1)
                external("addfiles.dll","AddFiles","*.*",h&,1)
                MoveListToHandle(h&)

                whileloop GetCount(h&)

                    if Left$(GetString$(h&,&loop-1),Len(Pfad$))=Pfad$

                        if FileExists(GetString$(h&,&loop-1))

                            Erase GetString$(h&,&loop-1)

                            if FileExists(GetString$(h&,&loop-1))

                                Messagebox("Die File '"+GetString$(h&,&loop-1)+"' konnte nicht gelöscht werden!","ERROR",16)
                                fehler%=fehler%+1

                            Endif

                        Endif

                    Endif

                Endwhile

                clearlist h&
                Chdir Pfad$

                if @GetDir$("@")=Pfad$

                    'AddDirs("*.*",h&,1)
                    external("addfiles.dll","AddDirs","*.*",h&,1)

                    whileloop GetCount(h&),1,-1

                        if Left$(GetString$(h&,&loop-1),Len(Pfad$))=Pfad$

                            if DirExists(GetString$(h&,&loop-1))

                                RmDir GetString$(h&,&loop-1)

                                if DirExists(GetString$(h&,&loop-1))

                                    Messagebox("Das Verzeichnis '"+GetString$(h&,&loop-1)+"' konnte nicht gelöscht werden!","ERROR",16)
                                    fehler%=fehler%+1

                                Endif

                            Endif

                        Endif

                    Endwhile

                    if @GetDir$("@")=Pfad$

                        if DirExists(Pfad$)

                            RmDir Pfad$

                            if DirExists(Pfad$)

                                Messagebox("Das Verzeichnis '"+Pfad$+"' konnte nicht gelöscht werden!","ERROR",16)
                                fehler%=fehler%+1

                            Endif

                        Endif

                    else

                        Messagebox("Der Pfad '"+Pfad$+"' konnte nicht geöffnet werden!","ERROR",16)

                    Endif

                else

                    Messagebox("Der Pfad '"+Pfad$+"' konnte nicht geöffnet werden!","ERROR",16)

                Endif

            else

                Messagebox("Der Pfad '"+Pfad$+"' konnte nicht geöffnet werden!","ERROR",16)

            Endif

        else

            Messagebox("Der Pfad '"+Pfad$+"' ist nicht vorhanden","ERROR",16)

        Endif

        if fehler%=0

            break

        else

            z%=Messagebox("Das Löschen des Ordnes '"+Pfad$+"' war nicht erfolgreich! Wollen Sie es Wiederholen?","INFO",5+64+256+4096)

            if z%=4

                fehler%=0

            else

                break

            Endif

        Endif

    Endwhile

    destroywindow(h&)
    'FreeDLL addfiles.dll&

EndProc

 
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
25.07.2011  
 




Jörg
Sellmeyer

den kompletten Pfad zur DLL angeben muss?


Hast Du es schon ausprobiert?
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
25.07.2011  
 



 
- Page 3 -



Julian
Schmidt
Jörg Sellmeyer (25.07.11)
Julian57 (25.07.11)
den kompletten Pfad zur DLL angeben muss?


Hast Du es schon ausprobiert?


Nein geht leider nicht.
Def DateiName(1) SubStr$(@$(1),-1,"\\")
Def DateiPfad(1) Translate$(@$(1),("\\" + DateiName(@$(1))),"")
delete_folder_completely("C:\\Test")
'delete_folder_completely(ChooseDir$("Verzeichnis wählen:"))

Proc delete_folder_completely

    Parameters Pfad$
    declare fehler%,z%,h&
    'var addfiles.dll&=ImportDLL("addfiles.dll","")

    while 1

        if DirExists(Pfad$)

            h&=Create("List", 0)
            Chdir Pfad$

            if @GetDir$("@")=Pfad$

                'AddFiles("*.*",h&,1)
                Messagebox(DateiPfad(Par$(1)) +"\\addfiles.dll","",0)
                external(DateiPfad(Par$(1)) +"\\addfiles.dll","AddFiles","*.*",h&,1)
                MoveListToHandle(h&)

                whileloop GetCount(h&)

                    if Left$(GetString$(h&,&loop-1),Len(Pfad$))=Pfad$

                        if FileExists(GetString$(h&,&loop-1))

                            Erase GetString$(h&,&loop-1)

                            if FileExists(GetString$(h&,&loop-1))

                                Messagebox("Die File '"+GetString$(h&,&loop-1)+"' konnte nicht gelöscht werden!","ERROR",16)
                                fehler%=fehler%+1

                            Endif

                        Endif

                    Endif

                Endwhile

                clearlist h&
                Chdir Pfad$

                if @GetDir$("@")=Pfad$

                    'AddDirs("*.*",h&,1)
                    external("addfiles.dll","AddDirs","*.*",h&,1)

                    whileloop GetCount(h&),1,-1

                        if Left$(GetString$(h&,&loop-1),Len(Pfad$))=Pfad$

                            if DirExists(GetString$(h&,&loop-1))

                                RmDir GetString$(h&,&loop-1)

                                if DirExists(GetString$(h&,&loop-1))

                                    Messagebox("Das Verzeichnis '"+GetString$(h&,&loop-1)+"' konnte nicht gelöscht werden!","ERROR",16)
                                    fehler%=fehler%+1

                                Endif

                            Endif

                        Endif

                    Endwhile

                    if @GetDir$("@")=Pfad$

                        if DirExists(Pfad$)

                            RmDir Pfad$

                            if DirExists(Pfad$)

                                Messagebox("Das Verzeichnis '"+Pfad$+"' konnte nicht gelöscht werden!","ERROR",16)
                                fehler%=fehler%+1

                            Endif

                        Endif

                    else

                        Messagebox("Der Pfad '"+Pfad$+"' konnte nicht geöffnet werden!","ERROR",16)

                    Endif

                else

                    Messagebox("Der Pfad '"+Pfad$+"' konnte nicht geöffnet werden!","ERROR",16)

                Endif

            else

                Messagebox("Der Pfad '"+Pfad$+"' konnte nicht geöffnet werden!","ERROR",16)

            Endif

        else

            Messagebox("Der Pfad '"+Pfad$+"' ist nicht vorhanden","ERROR",16)

        Endif

        if fehler%=0

            break

        else

            z%=Messagebox("Das Löschen des Ordnes '"+Pfad$+"' war nicht erfolgreich! Wollen Sie es Wiederholen?","INFO",5+64+256+4096)

            if z%=4

                fehler%=0

            else

                break

            Endif

        Endif

    Endwhile

    destroywindow(h&)
    'FreeDLL addfiles.dll&

EndProc

 
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
25.07.2011  
 




Jörg
Sellmeyer
Warum machst Du es Dir (und uns) so schwer? Du willst doch nur rauskriegen, ob Du die Dll richtig lädtst. Also einfach mal einen minimalsten Code, in dem Du die Dll lädst und eine Aktion ausführst:
Warum sollen wir uns die Aiuto zur Dll durchlesen, wenn Du es nicht machst?
Dort sollten die Parameter stehen, die die einzelnen Funktionen erwarten und in der Profanhilfe steht, wie der Aufruf mit External funktioniert. Du solltest keine Funktionen an die Dllaufrufe trasferimento, sondern Variablen. Also nicht:
external(DateiPfad(Par$(1)) +"\\addfiles.dll","AddFiles","*.*",h&,1)

Statt dessen so:
DLL$ = DateiPfad(Par$(1)) +"\\addfiles.dll"
External(DLL$,"AddFiles","*.*",h&,1)

Und ehrlich gesagt: Deine verschachtelte If-Struktur verstehe ich gar nicht

Du mußt doch nur überprüfen, ob das Verzeichnis, das Deiner Löschprozedur mit Parameters trasferimento wird, vorhanden ist.
Also etwas so:
Proc loesch

    Parameters Pfad$

    If DirExists(Pfad$)

        'hier der Code zum Löschen - also Liste füllen und abarbeiten

    Else

        'Hier eine Fehlermeldung

    EndIf

EndProc


Mit dem Pfad zur Dll: Es hängt davon ab, wo sie sich è. Wenn sie im Windowsordner oder einem anderen Ordner im Systempfad ist, wird sie direkt gefunden.
Wenn sie im Programmordner Deines Programmi liegt, wird sie auch gefunden. Wichtig hierbei: Solange Du entwickelst und Prf-File startest, ist evtl. der Profanordner der Programmordner!
Wenn sie irgendwoanders liegt, muß der Pfad angegeben werden.
Mach einen Drei- bis Fünfzeiler und ich teste gerne.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
26.07.2011  
 



Jörg Sellmeyer (26.07.11)
Pfad$ = DateiPfad(Par$(1)) +"\\addfiles.dll"
DateiPfad(Pfad$,"AddFiles","*.*",h&,1)


Ich glaube Du meintest External statt DateiPfad:
Pfad$ = DateiPfad(Par$(1)) +"\\addfiles.dll"
External(Pfad$,"AddFiles","*.*",h&,1)

@Julian: Vermutlich wäre es "ordentlicher" wenn Du die DLL(s) die Du benötigst bei Nichtvorhandensein nach appdata/roflmao ablegst und dort auch lädst.
 
26.07.2011  
 




Dieter
Zornow
Warum nimmst du nicht einfach die API zum löschen. Hier ist ein flexibler Code per Löschen, Kopieren Umbenennen und Bewegen. Je nach Parameter kannst du in den Papierkorb oder auch nicht löschen, ganz wie du willst. Das erspart doch den ganzen Hickhack und arbeitet zuverlässig. Im Beispiel wird ohne Nachfrage ein Verzeichnis mit Unterverzeichnissen nicht in den Papierkorb gelöscht
' Parameter 1: Auszuführende Operation=COPY, DELETE, RENAME, MOVE
' Parameter 2: Quelldatei(en)
' Parameter 3: Zielldatei(en)
' Parameter 4: 0 = Benutzer fragen, 1= ohne Nachfrage löschen
' Parameter 5: 0 = In Papierkorb verschieben, 1= "endgültig" löschen
' Parameter 6: 0 = Abbrechen bei vorhandener File, 1 = Kopie der File anlegen

Proc SHFileoperation

    Parameters operation$,File$,File2$,confirm%,recycle%,can%
    Declare opstruct#,file#,file2#,title#,operation&
    Var FOF_Flag% = 1 | 512 |  2048'FOF_MULTIDESTFILES,FOF_NOCONFIRMMKDIR,FOF_NOCOPYSECURITYATTRIBS
    Dim title#,24
    string title#,0 = "Fileoperation Progress"

    Select upper$(operation$)

        CaseOf "RENAME"

        operation&=4

        CaseOf "COPY"

        operation&=2

        CaseOf "MOVE"

        operation&=1

        CaseOf "DELETE"

        operation&=3

    endselect

    case confirm%:confirm%=16
    Casenot recycle%:recycle%=64

    If can%

        FOF_Flag% = FOF_Flag% | confirm% | recycle% | $20 | 8'$20 = FOF_WANTMAPPINGHANDLE 8 = FOF_RENAMEONCOLLISION

    Else

        FOF_Flag% = FOF_FLAG% | confirm% | recycle%'16 = FOF_NOCONFIRMATION,64 = FOF_ALLOWUNDO

    endif

    Dim opstruct#,30:Dim file#,(Len(file$)+2):Dim file2#,(Len(file2$)+2)
    String file#,0=(file$+Chr$(0)):String file2#,0=(file2$+Chr$(0))
    Long opstruct#,0=GetActiveWindow()' Handle des aufrufenden Fensters
    Long opstruct#,4=operation&'Welche Dateioperation gemacht wird
    Long opstruct#,8=file#' pfrom : hier die File per die Operation
    Long opstruct#,12=file2#'pto hier die Zieldateinamen oder 0
    Word opstruct#,16=FOF_Flag%
    Long opstruct#,18=0'Bei abbruch steht hier 1 nur bei langen Operationen
    Long opstruct#,22=0' muss immer Null sein, hier wird handle per SHNameMappings gesetzt bei Kopie
    Long opstruct#,26=Title#'Überschrift des Fortschrittsdialogs bei langen Operationen
    Var FEHLER&=External("SHELL32","SHFileOperationA",opstruct#)

    IF (long(opstruct#,18)=1)

        MessageBox("Die Dateioperation wurde abgebrochen!","Abbruch durch Benutzer!",64)

    ELSEIF (Fehler& <> 0)

        MessageBox(str$(fehler&),"Es ist ein Fehler aufgetreten",16)

    EndIf

    If val($WinVer)> 5.0

        Case LONG(opstruct#,22) <> 0:External("Shell32","SHFreeNameMappings",LONG(opstruct#,22))'min XP

    endif

    Dispose file#,file2#,opstruct#,title#

EndProc

cls
SHFileoperation("Delete","c:\\Temp\\Test\\","",1,1,0)
print "fertig"
Waitinput
end
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
26.07.2011  
 




Julian
Schmidt
Dieter Zornow (26.07.11)
Warum nimmst du nicht einfach die API zum löschen. Hier ist ein flexibler Code per Löschen, Kopieren Umbenennen und Bewegen. Je nach Parameter kannst du in den Papierkorb oder auch nicht löschen, ganz wie du willst. Das erspart doch den ganzen Hickhack und arbeitet zuverlässig. Im Beispiel wird ohne Nachfrage ein Verzeichnis mit Unterverzeichnissen nicht in den Papierkorb gelöscht
' Parameter 1: Auszuführende Operation=COPY, DELETE, RENAME, MOVE
' Parameter 2: Quelldatei(en)
' Parameter 3: Zielldatei(en)
' Parameter 4: 0 = Benutzer fragen, 1= ohne Nachfrage löschen
' Parameter 5: 0 = In Papierkorb verschieben, 1= "endgültig" löschen
' Parameter 6: 0 = Abbrechen bei vorhandener File, 1 = Kopie der File anlegen

Proc SHFileoperation

    Parameters operation$,File$,File2$,confirm%,recycle%,can%
    Declare opstruct#,file#,file2#,title#,operation&
    Var FOF_Flag% = 1 | 512 |  2048'FOF_MULTIDESTFILES,FOF_NOCONFIRMMKDIR,FOF_NOCOPYSECURITYATTRIBS
    Dim title#,24
    string title#,0 = "Fileoperation Progress"

    Select upper$(operation$)

        CaseOf "RENAME"

        operation&=4

        CaseOf "COPY"

        operation&=2

        CaseOf "MOVE"

        operation&=1

        CaseOf "DELETE"

        operation&=3

    endselect

    case confirm%:confirm%=16
    Casenot recycle%:recycle%=64

    If can%

        FOF_Flag% = FOF_Flag% | confirm% | recycle% | $20 | 8'$20 = FOF_WANTMAPPINGHANDLE 8 = FOF_RENAMEONCOLLISION

    Else

        FOF_Flag% = FOF_FLAG% | confirm% | recycle%'16 = FOF_NOCONFIRMATION,64 = FOF_ALLOWUNDO

    endif

    Dim opstruct#,30:Dim file#,(Len(file$)+2):Dim file2#,(Len(file2$)+2)
    String file#,0=(file$+Chr$(0)):String file2#,0=(file2$+Chr$(0))
    Long opstruct#,0=GetActiveWindow()' Handle des aufrufenden Fensters
    Long opstruct#,4=operation&'Welche Dateioperation gemacht wird
    Long opstruct#,8=file#' pfrom : hier die File per die Operation
    Long opstruct#,12=file2#'pto hier die Zieldateinamen oder 0
    Word opstruct#,16=FOF_Flag%
    Long opstruct#,18=0'Bei abbruch steht hier 1 nur bei langen Operationen
    Long opstruct#,22=0' muss immer Null sein, hier wird handle per SHNameMappings gesetzt bei Kopie
    Long opstruct#,26=Title#'Überschrift des Fortschrittsdialogs bei langen Operationen
    Var FEHLER&=External("SHELL32","SHFileOperationA",opstruct#)

    IF (long(opstruct#,18)=1)

        MessageBox("Die Dateioperation wurde abgebrochen!","Abbruch durch Benutzer!",64)

    ELSEIF (Fehler&  0)

        MessageBox(str$(fehler&),"Es ist ein Fehler aufgetreten",16)

    EndIf

    If val($WinVer)> 5.0

        Case LONG(opstruct#,22)  0:External("Shell32","SHFreeNameMappings",LONG(opstruct#,22))'min XP

    endif

    Dispose file#,file2#,opstruct#,title#

EndProc

cls
SHFileoperation("Delete","c:\\Temp\\Test\\","",1,1,0)
print "fertig"
Waitinput
end



Genau so etwas habe ich gesucht!
 
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
26.07.2011  
 




E.T.
Julian57 (26.07.11)
Genau so etwas habe ich gesucht!


...aber bestimmt nicht hier mit der Foren-eigenen Suchfunktion ,
z.B.  [...]  (steht da seit 2007 !!)
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
26.07.2011  
 




Julian
Schmidt
Ich will die File ja auch nicht in Papierkorb verschieben. ^^
Über das Foro habe ich nur "Verzeichnis" gesucht. Und circa Strg+F anschließend nach "löschen", "loeschen" gesucht, wo nicht das was ich suchte gefunden wurde...
 
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
26.07.2011  
 



Jupp, war nicht einfach zu finden -

darum mache ich mir immer die Mühe solche Fonte mit relevanten Suchbegriffen zu versehen um einzusortieren.
 
26.07.2011  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

30.761 Views

Untitledvor 0 min.
E.T.22.11.2023
Georg21.01.2021
AndreasS23.12.2018
Klaus Ernst09.01.2018
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie