Foro | | | | - Página 1 - |
| Julian Schmidt | ¿Cómo se puede uno un directorio al elegantesten con allen Unterverzeichnissen y allem enthaltenen Archivos löschen? |
| | | ˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗ Webseite [...] | 24.07.2011 ▲ |
| |
| | | | - Página 2 - |
| | « Dieser Contribución wurde como Solución gekennzeichnet. » | | - Página 3 - |
| Dieter Zornow | ¿Por qué nimmst du no simplemente el API para löschen. Hier es una flexibler Code para Löschen, Kopieren Umbenennen y Bewegen. Je después de Parámetro kannst du en el Papierkorb oder auch no löschen, bastante como du willst. Das erspart doch el ganzen Hickhack y arbeitet zuverlässig. Im Ejemplo se sin Nachfrage un directorio con Unterverzeichnissen no en el Papierkorb gelöscht
' Parámetro 1: Auszuführende Operation=COPY, DELETE, RENAME, MOVE
' Parámetro 2: Quelldatei(en)
' Parámetro 3: Zielldatei(en)
' Parámetro 4: 0 = Benutzer fragen, 1= sin Nachfrage löschen
' Parámetro 5: 0 = In Papierkorb mover, 1= "endgültig" löschen
' Parámetro 6: 0 = Alto en vorhandener Expediente, 1 = Kopie el Expediente invertir
Proc SHFileoperation
Parámetros operation$,File$,File2$,confirm%,recycle%,can%
Declarar opstruct#,file#,file2#,title#,operation&
Var FOF_Flag% = 1 | 512 | 2048'FOF_MULTIDESTFILES,FOF_NOCONFIRMMKDIR,FOF_NOCOPYSECURITYATTRIBS
Dim title#,24
cadena title#,0 = "Fileoperation Progress"
Select upper$(operation$)
CaseOf "RENAME"
operation&=4
CaseOf "COPY"
operation&=2
CaseOf "MOVE"
operation&=1
CaseOf "DELETE"
operation&=3
endselect
caso confirm%:confirm%=16
Casenot recycle%:recycle%=64
If can%
FOF_Flag% = FOF_Flag% | confirm% | recycle% | $20 | 8'$20 = FOF_WANTMAPPINGHANDLE 8 = FOF_RENAMEONCOLLISION
Más
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))
Largo opstruct#,0=GetActiveWindow()' Handle des aufrufenden Fensters
Largo opstruct#,4=operation&'Welche Dateioperation gemacht se
Largo opstruct#,8=file#' pfrom : hier el Archivos para el Operation
Largo opstruct#,12=file2#'pto hier el Zieldateinamen oder 0
Word opstruct#,16=FOF_Flag%
Largo opstruct#,18=0'En abbruch es hier 1 sólo en langen Operationen
Largo opstruct#,22=0' muss siempre Null ser, hier se handle para SHNameMappings gesetzt en Kopie
Largo opstruct#,26=Title#'Überschrift des Fortschrittsdialogs en langen Operationen
Var FEHLER&=Externo("SHELL32","SHFileOperationA",opstruct#)
IF (long(opstruct#,18)=1)
MessageBox("Die Dateioperation wurde abgebrochen!","Abbruch por Benutzer!",64)
ELSEIF (Fehler& <> 0)
MessageBox(str$(fehler&),"Es es una Fehler aufgetreten",16)
EndIf
If val($WinVer)> 5.0
Case LONG(opstruct#,22) <> 0:Externo("Shell32","SHFreeNameMappings",LONG(opstruct#,22))'min XP
endif
Disponer file#,file2#,opstruct#,title#
ENDPROC
cls
SHFileoperation("Delete","c:\\Temp\\Test\\","",1,1,0)
imprimir "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 ▲ |
| | |
| | | Schonmal después de ChooseDir$ una imprimir getDir$("@") gemacht?
Vlt. solltest du zusätzlich auch antes el Löschen cada individual Expediente el Dateipfad el Expediente (z.B. con mid$ ) con el gewählten Directorio vergleichen. |
| | | | |
| | Julian Schmidt | @Thomas - Nein, en el Papierkorb debería el Archivos después de el löschen no landen. Borrar es ya Haga clic en Aceptar auch si no restlos es. @Marc - Nein, qué es el deltree? Ejemplo? @IF: - IF (25.07.11)
Schonmal después de ChooseDir$ una imprimir getDir$("@") gemacht?
Como se el trabajo? ¿Puede du's en el código einbauen?
IF (25.07.11)
Vlt. solltest du zusätzlich auch antes el Löschen cada individual Expediente el Dateipfad el Expediente (z.B. con mid$ ) con el gewählten Directorio vergleichen.
Gute Concepto!
delete_folder_completely("C:\\Test")
'delete_folder_completely(ChooseDir$("Verzeichnis wählen:"))
Messagebox("Ordner gelöscht","INFO",64)
Proc delete_folder_completely
Parámetros Pfad$
var addfiles.dll&=ImportDLL("addfiles.dll","")
var h&=Crear("List", 0)
Chdir Pfad$
caso @GetDir$("@")=Pfad$ : AddFiles("*.*",h&,1)
MoveListToHandle(h&)
whileloop GetCount(h&)
caso Left$(GetString$(h&,&bucle-1),Len(Pfad$))=Pfad$ : Borrar GetString$(h&,&bucle-1)
Endwhile
clearlist h&
Chdir Pfad$
caso @GetDir$("@")=Pfad$ : AddDirs("*.*",h&,1)
whileloop GetCount(h&),1,-1
caso Left$(GetString$(h&,&bucle-1),Len(Pfad$))=Pfad$ : RmDir GetString$(h&,&bucle-1)
Endwhile
destroywindow(h&)
caso @GetDir$("@")=Pfad$ : RmDir Pfad$
FreeDLL addfiles.dll&
ENDPROC
@All Weiterhin bleiben mehrere Fragen offen.
¿Por qué se el Ausgangsordner no gelöscht? Trotz el Línea "case @GetDir$("@")=Pfad$ : RmDir Pfad$". ¿Por qué kommt si yo el erste Línea en "delete_folder_completely(ChooseDir$("Verzeichnis wählen:"))" ändere una Fehlermeldung? |
| | | ˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗ Webseite [...] | 25.07.2011 ▲ |
| |
| | Jörg Sellmeyer | Mach doch veces que aquí
Außerdem nützt Usted que aquí:
nichts, en evtl. una Fehler abzufangen, como Su Programa así más o menos weitermacht. Wenn, entonces una vernünftige IF-Abfrage en el Usted auch una Alternative programmierst. Also una Messagebox "Falscher Pfad" oder algo como.
Usted springst con ChDir en el Ordner rein. Lo kann bien ser, daß dieser dadurch blockiert se y Usted sólo löschen kannst, si otra vez de el Ordner rausgehst: ChDir ".."
Borrar es una alter DOS-Befehl. Sehr effektiv aber auch con Vorsicht a genießen, si uno se no auskennt. Gib en el DOS-Ventana Help /erase una. |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 25.07.2011 ▲ |
| |
| | | @Jörg: Yo glaube ¿Quieres decir que deltree en lugar de erase ?! Borrar gibts aber auch y /S ists como deltree -
mein aktuelles XP sabe deltree ("""leider""") no mehr.
@Julian: Einfach después de Deinem ChooseDir$ veces una imprimir getDir$("@") en a schauen si ChooseDir$ el Pfad ändert.
¿Por qué una Expediente/ Ordner se no entfernen lässt... irgend una Prozess llevará a cabo todavía al o Directorio rumwuseln y una Handle halten - vlt. el Explorer el a su oculto thumbs.db klebt oder una AV-Programa oder una Indizierungsdienst oder oder oder... nutze testweise el AddFile.DLL como en el Ejemplo auch veces por external en lugar de por importdll en auch auszuschließen si Yo como vergessen habe una Handle a schließen. |
| | | | |
| | | | | | | |
| | | ¿Quieres decir que si el Ordner una otro Benutzer gehört oder el Benutzer kein Lösch-Recht besitzt? |
| | | | |
| | Jörg Sellmeyer | Sí - meinte natürlich deltree. Sorry... |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 25.07.2011 ▲ |
| |
| | Julian Schmidt | Jörg Sellmeyer (25.07.11)
Außerdem nützt Usted que aquí: nichts, en evtl. una Fehler abzufangen, como Su Programa así más o menos weitermacht. Wenn, entonces una vernünftige IF-Abfrage en el Usted auch una Alternative programmierst. Also una Messagebox "Falscher Pfad" oder algo como.
cls
delete_folder_completely("C:\\Test")
'delete_folder_completely(ChooseDir$("Verzeichnis wählen:"))
Proc delete_folder_completely
Parámetros Pfad$
declarar fehler%,z%,h&
var addfiles.dll&=ImportDLL("addfiles.dll","")
mientras que 1
if DirExists(Pfad$)
h&=Crear("List", 0)
Chdir Pfad$
if @GetDir$("@")=Pfad$
AddFiles("*.*",h&,1)
MoveListToHandle(h&)
whileloop GetCount(h&)
if Left$(GetString$(h&,&bucle-1),Len(Pfad$))=Pfad$
if FileExists(GetString$(h&,&bucle-1))
Borrar GetString$(h&,&bucle-1)
if FileExists(GetString$(h&,&bucle-1))
Messagebox("Die Expediente '"+GetString$(h&,&bucle-1)+"' podría no gelöscht voluntad!","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&,&bucle-1),Len(Pfad$))=Pfad$
if DirExists(GetString$(h&,&bucle-1))
RmDir GetString$(h&,&bucle-1)
if DirExists(GetString$(h&,&bucle-1))
Messagebox("Das Directorio '"+GetString$(h&,&bucle-1)+"' podría no gelöscht voluntad!","ERROR",16)
fehler%=fehler%+1
Endif
Endif
Endif
Endwhile
if @GetDir$("@")=Pfad$
if DirExists(Pfad$)
RmDir Pfad$
if DirExists(Pfad$)
Messagebox("Das Directorio '"+Pfad$+"' podría no gelöscht voluntad!","ERROR",16)
fehler%=fehler%+1
Endif
Endif
más
Messagebox("Der Pfad '"+Pfad$+"' podría no geöffnet voluntad!","ERROR",16)
Endif
más
Messagebox("Der Pfad '"+Pfad$+"' podría no geöffnet voluntad!","ERROR",16)
Endif
más
Messagebox("Der Pfad '"+Pfad$+"' podría no geöffnet voluntad!","ERROR",16)
Endif
más
Messagebox("Der Pfad '"+Pfad$+"' es no vorhanden","ERROR",16)
Endif
if fehler%=0
romper
más
z%=Messagebox("Das Löschen des Ordnes '"+Pfad$+"' war no erfolgreich! Wollen Sie lo Wiederholen?","INFO",5+64+256+4096)
if z%=4
fehler%=0
más
romper
Endif
Endif
Endwhile
destroywindow(h&)
FreeDLL addfiles.dll&
ENDPROC
Jörg Sellmeyer (25.07.11)
Usted springst con ChDir en el Ordner rein. Lo kann bien ser, daß dieser dadurch blockiert se y Usted sólo löschen kannst, si otra vez de el Ordner rausgehst: ChDir ".."
Como podría Yo algo como en el código einbeziehen?
IF (25.07.11)
¿Por qué una Expediente/ Ordner se no entfernen lässt... irgend una Prozess llevará a cabo todavía al o Directorio rumwuseln y una Handle halten - vlt. el Explorer el a su oculto thumbs.db klebt oder una AV-Programa oder una Indizierungsdienst
Das Yo ya vermutet! Yo habe deswegen intenta el Ordner freizugeben, el Computer neugestartet, Explorer.exe final. Danach ging lo, como zuvor ebenfalls no! Anschließend Yo encima Unlocker überprüft si una Prozess el Ordner verwendet. Der Sagte me él no en Verwendung es! Nach una más Test des Löschens ging lo otra vez no. Liegt etwa al Quellcode, o. a RmDir? Oder porque XProfan incluso esta Ordner blockiert.
IF (25.07.11)
oder oder oder... nutze testweise el AddFile.DLL como en el Ejemplo auch veces por external en lugar de por importdll en auch auszuschließen si Yo como vergessen habe una Handle a schließen.
Muss Yo el DLL davor todavía iwie einbinden [UseDLL más o menos?]? |
| | | ˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗ Webseite [...] | 25.07.2011 ▲ |
| |
| | | Nein, simplemente sólo Externo. |
| | | | |
| | Julian Schmidt | Über el Aufruf encima Externo kommt wiederum una Fehlermeldung. Liegt lo vlt daran el Yo, el kompletten Pfad a DLL angeben muss?
delete_folder_completely("C:\\Test")
'delete_folder_completely(ChooseDir$("Verzeichnis wählen:"))
Proc delete_folder_completely
Parámetros Pfad$
declarar fehler%,z%,h&
'var addfiles.dll&=ImportDLL("addfiles.dll","")
mientras que 1
if DirExists(Pfad$)
h&=Crear("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&,&bucle-1),Len(Pfad$))=Pfad$
if FileExists(GetString$(h&,&bucle-1))
Borrar GetString$(h&,&bucle-1)
if FileExists(GetString$(h&,&bucle-1))
Messagebox("Die Expediente '"+GetString$(h&,&bucle-1)+"' podría no gelöscht voluntad!","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&,&bucle-1),Len(Pfad$))=Pfad$
if DirExists(GetString$(h&,&bucle-1))
RmDir GetString$(h&,&bucle-1)
if DirExists(GetString$(h&,&bucle-1))
Messagebox("Das Directorio '"+GetString$(h&,&bucle-1)+"' podría no gelöscht voluntad!","ERROR",16)
fehler%=fehler%+1
Endif
Endif
Endif
Endwhile
if @GetDir$("@")=Pfad$
if DirExists(Pfad$)
RmDir Pfad$
if DirExists(Pfad$)
Messagebox("Das Directorio '"+Pfad$+"' podría no gelöscht voluntad!","ERROR",16)
fehler%=fehler%+1
Endif
Endif
más
Messagebox("Der Pfad '"+Pfad$+"' podría no geöffnet voluntad!","ERROR",16)
Endif
más
Messagebox("Der Pfad '"+Pfad$+"' podría no geöffnet voluntad!","ERROR",16)
Endif
más
Messagebox("Der Pfad '"+Pfad$+"' podría no geöffnet voluntad!","ERROR",16)
Endif
más
Messagebox("Der Pfad '"+Pfad$+"' es no vorhanden","ERROR",16)
Endif
if fehler%=0
romper
más
z%=Messagebox("Das Löschen des Ordnes '"+Pfad$+"' war no erfolgreich! Wollen Sie lo Wiederholen?","INFO",5+64+256+4096)
if z%=4
fehler%=0
más
romper
Endif
Endif
Endwhile
destroywindow(h&)
'FreeDLL addfiles.dll&
ENDPROC
|
| | | ˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗ Webseite [...] | 25.07.2011 ▲ |
| |
| | Jörg Sellmeyer |
el kompletten Pfad a DLL angeben muss?
Hast Usted lo ya ausprobiert? |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 25.07.2011 ▲ |
| |
| | Julian Schmidt | Jörg Sellmeyer (25.07.11)
Nein va por desgracia, no.
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
Parámetros Pfad$
declarar fehler%,z%,h&
'var addfiles.dll&=ImportDLL("addfiles.dll","")
mientras que 1
if DirExists(Pfad$)
h&=Crear("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&,&bucle-1),Len(Pfad$))=Pfad$
if FileExists(GetString$(h&,&bucle-1))
Borrar GetString$(h&,&bucle-1)
if FileExists(GetString$(h&,&bucle-1))
Messagebox("Die Expediente '"+GetString$(h&,&bucle-1)+"' podría no gelöscht voluntad!","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&,&bucle-1),Len(Pfad$))=Pfad$
if DirExists(GetString$(h&,&bucle-1))
RmDir GetString$(h&,&bucle-1)
if DirExists(GetString$(h&,&bucle-1))
Messagebox("Das Directorio '"+GetString$(h&,&bucle-1)+"' podría no gelöscht voluntad!","ERROR",16)
fehler%=fehler%+1
Endif
Endif
Endif
Endwhile
if @GetDir$("@")=Pfad$
if DirExists(Pfad$)
RmDir Pfad$
if DirExists(Pfad$)
Messagebox("Das Directorio '"+Pfad$+"' podría no gelöscht voluntad!","ERROR",16)
fehler%=fehler%+1
Endif
Endif
más
Messagebox("Der Pfad '"+Pfad$+"' podría no geöffnet voluntad!","ERROR",16)
Endif
más
Messagebox("Der Pfad '"+Pfad$+"' podría no geöffnet voluntad!","ERROR",16)
Endif
más
Messagebox("Der Pfad '"+Pfad$+"' podría no geöffnet voluntad!","ERROR",16)
Endif
más
Messagebox("Der Pfad '"+Pfad$+"' es no vorhanden","ERROR",16)
Endif
if fehler%=0
romper
más
z%=Messagebox("Das Löschen des Ordnes '"+Pfad$+"' war no erfolgreich! Wollen Sie lo Wiederholen?","INFO",5+64+256+4096)
if z%=4
fehler%=0
más
romper
Endif
Endif
Endwhile
destroywindow(h&)
'FreeDLL addfiles.dll&
ENDPROC
|
| | | ˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗ Webseite [...] | 25.07.2011 ▲ |
| |
|
RespuestaTema opciones | 30.807 Views |
ThemeninformationenDieses Thema ha 8 subscriber: |