Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Ordner löschen, auch wenn darauf zugegriffen wird (https://www.delphipraxis.net/138944-ordner-loeschen-auch-wenn-darauf-zugegriffen-wird.html)

Satty67 21. Aug 2009 08:59

Re: Ordner löschen, auch wenn darauf zugegriffen wird
 
Ist der Ordner nach einer Operation der Default-Pfad? Vielleicht mit SetCurrentDir('C:\') anders setzten, damit der Ordner quasi nicht mehr benutzt wird.

Ansonsten, wie löscht Du die Ordner?

e-gon 21. Aug 2009 09:15

Re: Ordner löschen, auch wenn darauf zugegriffen wird
 
Als ich noch mit der FileListBox gearbeitet habe, setzte ich die Eigenschaft Directory nach dem Auslesen bereits erfolglos auf 'C:\', was wohl den gleichen Effekt wie SetCurrentDir('C:\') hat. Aber ich versuche es trotzdem mal...
Bei der ShellTreeView-Komponente bringt das allerdings wenig.

Das Löschen versuchte ich schon auf die verschiedensten Arten. Vom Druck auf die Entferntaste im Windows-Explorer bis hin zu den Schweizern habe ich schon alles mögliche ausprobiert.

himitsu 21. Aug 2009 09:18

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

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='.TXT' then
        LBFile.Items.Add(FileInfo.Name);
    until FindNext(FileInfo)<>0;
    FindClose(FileInfo);
  end;
end;

also erstmal ... dieser Code funktioniert bei mir ganz normal und es bleibt auch nichts blockiert
(sicherheitshalber mal mit Delphi 7 getestet)

wobei da ein paar Fragen aufkommen:
- warum nicht gleich nach .TXT suchen?
- und sicher, daß bei dir alle gwünschten Dateien gefunden werden? (also nur die, welche kein einziges Attribut besitzen, wie z.B. faArchive)

Delphi-Quellcode:
procedure ReadLBFile(Path: string);
var FileInfo: TSearchRec;
begin
  LBFile.Clear;
  if FindFirst(Path + '*.txt', faAnyFile and not faDirectory, FileInfo) = 0 then begin
    repeat
      LBFile.Items.Add(FileInfo.Name);
    until FindNext(FileInfo) <> 0;
    FindClose(FileInfo);
  end;
end;

e-gon 21. Aug 2009 09:39

Re: Ordner löschen, auch wenn darauf zugegriffen wird
 
Du hast recht! Ich habe jetzt mal ein Beispiel ohne ShellTreeView gemacht und es tut. Dann liegt das Übel wohl alleine an ShellTreeView!

Warum ich nicht gleich nach *.txt suche liegt daran, dass es ja auch mehrere Dateiendungen gibt, nach denen man suchen könnte. Oder gibt es etwa eine Möglichkeit mit FindFirst gleichzeitig nach *.txt, *.doc und *.xls suchen zu lassen?

Und nochmal hast Du recht! Ich habe die Attribute vergessen. Danke für den Hinweis!

himitsu 21. Aug 2009 10:10

Re: Ordner löschen, auch wenn darauf zugegriffen wird
 
nee, mehrere Masken kann man leider nicht angeben, also dann isses schon OK so :angel:

ich hab das jetzt bei meinem SearchSameFiles praktisch in etwa so gelöst:
Delphi-Quellcode:
uses MatchTextUnit;

procedure TForm1.ReadFiles(const Path, Mask: String; List: TStrings);
var
  FileInfo: TSearchRec;
begin
  List.BeginUpdate;
  try
    List.Clear;
    if FindFirst(Path + '*.*', faAnyFile and not faDirectory, FileInfo) = 0 then begin
      repeat
        if MatchText(Mask, FileInfo.Name) then
          List.Items.Add(FileInfo.Name);
      until FindNext(FileInfo) <> 0;
      FindClose(FileInfo);
    end;
  finally
    List.EndUpdate;
  end;
end;
> MatchText

Delphi-Quellcode:
ReadFiles('C:\', '*.txt', LBFile);
ReadFiles('C:\Path\', '*.txt|*.doc', LBFile);
PS: es macht sich immer gut, wenn du GUI und Logik etwas trennst
z.B. spätere Umbauten sind dann einfacher und man kann den Code auch mal wiederverwenden


Bezüglich deiner ShellTreeView gibt es das Problem, daß sie immer wohl angezeigt wird.
Bei mir war es damals so, daß ich den OpenDirectoryDialog statisch aufgerufen hatte, vorher mir ansehn konnte, welche Handles vorhanden sind und nachher im Vergleich prüfen konnte, welche Handles neu waren.
Und da ich wußte, daß an anderen Stellen sich keine Handle währenddessen ändern konnten und ich wußte daß nix schlimmes passiert, wenn ich diese Handles nun selber bereinige, konnte ich die Unterschiede dann einfach selber beheben.

e-gon 21. Aug 2009 10:27

Re: Ordner löschen, auch wenn darauf zugegriffen wird
 
Vielen Dank für Eure Unterstützung (besonders Dir himitsu), aber ich habe die Nase jetzt voll! Ich stelle einen Linuxrechner daneben und mache die Verzeichnisse darüber ohne Rücksicht auf Verluste platt!!!

OldGrumpy 21. Aug 2009 11:24

Re: Ordner löschen, auch wenn darauf zugegriffen wird
 
Bei diesen Holzhammermethoden möchte ich meine Daten aber nicht mehr von Dir migrieren lassen :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 Uhr.
Seite 2 von 2     12   

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