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 2 von 2     12   
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#11

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

  Alt 21. Aug 2009, 09:59
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?
  Mit Zitat antworten Zitat
e-gon

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

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

  Alt 21. Aug 2009, 10:15
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 21. Aug 2009, 10:18
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='.TXTthen
        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;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
e-gon

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

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

  Alt 21. Aug 2009, 10:39
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!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 21. Aug 2009, 11:10
nee, mehrere Masken kann man leider nicht angeben, also dann isses schon OK so

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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
e-gon

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

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

  Alt 21. Aug 2009, 11:27
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!!!
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#17

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

  Alt 21. Aug 2009, 12:24
Bei diesen Holzhammermethoden möchte ich meine Daten aber nicht mehr von Dir migrieren lassen
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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:33 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