AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Ordner löschen, auch wenn darauf zugegriffen wird
Thema durchsuchen
Ansicht
Themen-Optionen

Ordner löschen, auch wenn darauf zugegriffen wird

Ein Thema von e-gon · begonnen am 20. Aug 2009 · letzter Beitrag vom 21. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2      
e-gon

Registriert seit: 7. Jul 2003
Ort: Stuttgart
163 Beiträge
 
Delphi 6 Enterprise
 
#1

Ordner löschen, auch wenn darauf zugegriffen wird

  Alt 20. Aug 2009, 11:22
Hallo Delphifreunde,

ich muss Daten von mehreren Festplatten auf einer zusammenfassen. Um die ganzen doppelten Datei herauszufinden, Dateien umzubenennen usw. habe ich mir viele kleine Helferlei programmiert. Leider benutzen diese fast alle ShellTreeView oder FileListBox. Und wenn ich dann endlich ein doppeltes Verzeichnis gefunden habe und es im Windows-Explorer löschen will bekomme ich nur zur Antwort "Der Ordner BlaBla kann nicht entfernt werden: Die Datei wird von einer anderen Person bzw. einem anderen Programm verwendet. Schließen Sie alle Programme, die die Datei eventuell verwenden können, und wiederholen Sie den Vorgang."

Da ich aber keine Lust habe zum Löschen eines dämlichen Ordners sämtliche Helferlei zu schließen (und auch wieder zu öffnen!), nur weil diese irgendwann mal auf das Verzeichnis zugegriffen haben, schreibe ich ein weiteres Helferlei. Das Problem ist allerdings, dass es mir auch mit SHFileOperation und RemoveDir nicht gelingt den Ordner zu löschen.

Kennt jemand eine Möglichkeit ein Verzeichnis zu löschen, sch**ßegal wer oder was auch immer darauf zugreift?

Gruß eines verzweifelten
E-gons
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: Ordner löschen, auch wenn darauf zugegriffen wird

  Alt 20. Aug 2009, 11:32
Deine Helferlein müssen nur nach dem Auslesen die Datei-/Verzeichnishandles wieder freigeben, dann gibt's da auch keine Probleme mehr

OK, TOpenDialog und Co. halten in einem Thread oftmals einige handles offen, aber dafür hab ich irgendwo noch 'nen "Patch" ... müßte ich mal suchen bzw. es kann ja mal wer die Beiträge zu meinem FileSplitter durchsuchen, ich glaub da hatte ich dieses mal erwähnt.

Zitat:
Kennt jemand eine Möglichkeit ein Verzeichnis zu löschen, sch**ßegal wer oder was auch immer darauf zugreift?
nein, sowas gibt's nicht

Man kann aber die Handles freigeben, welche von anderen Programmen genutzt werden (Stichwort: Unlocker),
oder man sagt Windows, daß es einen Ordner/Datei nach dem nächsten Neustart löschen soll (wo diese ja dann wohl frei sind)
$2B or not $2B
  Mit Zitat antworten Zitat
e-gon

Registriert seit: 7. Jul 2003
Ort: Stuttgart
163 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Ordner löschen, auch wenn darauf zugegriffen wird

  Alt 20. Aug 2009, 11:45
Hallo himitsu,

vielen Dank für die schnelle Antwort.

Mit Handles kenne ich mich nicht aus, werde aber mal recherchieren...

Gruß
E-gon
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Ordner löschen, auch wenn darauf zugegriffen wird

  Alt 20. Aug 2009, 11:55
Zitat von e-gon:
Mit Handles kenne ich mich nicht aus, werde aber mal recherchieren...
Wenn ich so was lese muss ich immer grinsen. Das Handle Konzept ist ein essentieller Bestandteil von Windows. Und man sollte als Entwickler eigentlich damit vertraut sein. Ist ungefähr so, als wenn sich ein Automechaniker nicht mit Zylinderkopfdichtungen auskennt:
"Der Motor verbrennt nicht richtig. Könnte an der Zylinderkopfdichtung liegen."
"Ja wissen Sie, mit Zylinderkopfdichtungen kenne ich mich nicht so, aber ich werde mal Recherchieren. Mein Spezialgebiet sind eigentlich Zündkerzen."
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
e-gon

Registriert seit: 7. Jul 2003
Ort: Stuttgart
163 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: Ordner löschen, auch wenn darauf zugegriffen wird

  Alt 20. Aug 2009, 14:29
@Luckie:

Das kann ich jetzt natürlich nicht so stehen lassen. Ich bin eigentlich Spezialist für Datenmigration. Mein einziger Berührungspunkt mit dem "Handle Konzept" ist das Einlesen und Schreiben der Daten.

Oder um bei Deinem Beispiel zu bleiben: Ein Karosserieblechner gehört auch zu den Automechanikern. Den brauchen jedoch die Zylinderkopfdichtungen nicht zu interessieren. Und nebenbei gesagt verdient er auch noch besser.

@all:
Aber zurück zum Thema.

Wie es aussieht habe ich nun zwei Möglichkeiten
1. Meinen Helferlein das Handle unter den Füßen wegziehen oder
2. Bei meinen Helferlein die Verzeichnishandles wieder freigeben

Das mit dem Handle Wegziehen ist nicht unbedingt die feine Art. Deshalb würde ich doch eher zweiteres bevorzugen.

@himitsu:
Könntest Du das mit dem Freigeben von Datei-/Verzeichnishandles bei Dialogsobjekten bitte etwas genauer beschreiben?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Ordner löschen, auch wenn darauf zugegriffen wird

  Alt 20. Aug 2009, 18:40
Um ein geöffnete File von einem anderen Prozess zu löschen, muss man tief ins Betriebssystem einsteigen.
Es gibt einige Tools, die das können, aber wahrscheinlich keinen Sourcecode dafür.
http://ccollomb.free.fr/unlocker/

Ich muss mich berichtigen - es gibt Sourcecode:
http://www.codeguru.com/Cpp/W-P/file...cle.php/c1287/
Andreas
  Mit Zitat antworten Zitat
e-gon

Registriert seit: 7. Jul 2003
Ort: Stuttgart
163 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: Ordner löschen, auch wenn darauf zugegriffen wird

  Alt 21. Aug 2009, 08:49
Danke shmia, aber wie schon gesagt würde ich inzwischen die Möglichkeit bevorzugen bei den Helferlein nach dem Auslesen des Verzeichnisses das Verzeichnishandle einfach wieder freizugeben. Wie auch immer das funktioniert...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: Ordner löschen, auch wenn darauf zugegriffen wird

  Alt 21. Aug 2009, 09:21
Es kommt ja erstmal drauf an, was genau für Komponenten/Funktionen und wie du sie benutzt.
$2B or not $2B
  Mit Zitat antworten Zitat
e-gon

Registriert seit: 7. Jul 2003
Ort: Stuttgart
163 Beiträge
 
Delphi 6 Enterprise
 
#9

Re: Ordner löschen, auch wenn darauf zugegriffen wird

  Alt 21. Aug 2009, 09:30
Ok, ich habe jetzt Testweise die FileListBox durch eine einfache ListBox ersetzt (LBFile) und lese das Verzeichnis wie folgt selbst aus:

Delphi-Quellcode:
procedure TForm1.ReadLBFile(Path: string);
var FileExt: string;
     FileInfo: TSearchRec;
begin
  LBFile.Clear;
  if FindFirst(Path+'*.*',0, FileInfo)=0 then begin
    repeat
      FileExt:= UpperCase(ExtractFileExt(FileInfo.Name));
      if FileExt='.TXTthen
        LBFile.Items.Add(FileInfo.Name);
    until FindNext(FileInfo)<>0;
    FindClose(FileInfo);
  end;
end;
Obwohl ich FileInfo ordnungsgemäß schließe, lassen sich zwar die Dateien nicht aber der Ordner, in denen sich die Dateien befinden, von anderen Programmen löschen. Was muss ich tun um den ausgelesenen Ordner für andere Programme wieder zum Löschen freizugeben ohne gleich das ganze Programm schließen zu müssen?
  Mit Zitat antworten Zitat
e-gon

Registriert seit: 7. Jul 2003
Ort: Stuttgart
163 Beiträge
 
Delphi 6 Enterprise
 
#10

Re: Ordner löschen, auch wenn darauf zugegriffen wird

  Alt 21. Aug 2009, 09:55
Bei der ShellTreeView-Komponente ist es genauso. Einmal ein Verzeichnis selektiert kann man dieses mit einem anderen Programm nicht mehr löschen, selbst wenn im ShellTreeView längst ein anderer Ordner ausgewählt und das zu löschende Verzeichnis noch nicht mal eingeblendet ist.

Deshalb wollte ich schlau sein und habe ShellTreeView durch die Funktion SelectDirectory ersetzt. Aber gleiches Spiel! Die ausgewählten Verzeichnisse lassen sich erst nach dem Beenden des Programms von anderen Programm löschen...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz