AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verzeichnis löschen...

Ein Thema von delphinia · begonnen am 26. Mär 2006 · letzter Beitrag vom 26. Mär 2006
Antwort Antwort
Seite 1 von 2  1 2      
delphinia

Registriert seit: 16. Feb 2006
444 Beiträge
 
Delphi 11 Alexandria
 
#1

Verzeichnis löschen...

  Alt 26. Mär 2006, 13:42
Ja der Titel sagt es schon aber das ist noch längst nicht alles.

Ich starte mein Programm und es scannt Verzeichnisse.
Dann wenn es läuft möchte ich gerne Verzeichnisse löschen - nur geht es nicht - das das Programm selbst einen Handle auf das zu löschenden Verzeichnis hat - muss erst mittels dem Tool Unlocker das Verzeichnis freigeben und dann kann es löschen.

Wie komme ich ohne diesem Tool in den Genus das Verzeichnis zu löschen.


Was ich meine falls es nicht verstanden ist das was man mit diesem Tool halt macht
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
Ratte

Registriert seit: 12. Dez 2003
Ort: Erfurt
345 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Verzeichnis löschen...

  Alt 26. Mär 2006, 13:55
Wieso hast du ein Handle auf das Verzeichnis? Besorg dir den Pfad, gib das Handle frei und losch das ganzee dann nach dem Pfad.
Schiffsratte der U.S.S. Delphipraxis, Laderaum 4538
BUSH:= TTerminator.create;
  Mit Zitat antworten Zitat
delphinia

Registriert seit: 16. Feb 2006
444 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Verzeichnis löschen...

  Alt 26. Mär 2006, 13:59
warum das so ist weis ich nicht - das passiert nur wenn ich mittels meiner suchefunktion - die verzeichnisse scanne!

Ok - aber wie geben ich so einen handle frei das ist ja mein problem ;(
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#4

Re: Verzeichnis löschen...

  Alt 26. Mär 2006, 14:06
Vielleicht mit einem CloseHandle?
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.889 Beiträge
 
Delphi 12 Athens
 
#5

Re: Verzeichnis löschen...

  Alt 26. Mär 2006, 14:07
Hallo delphina!

Die Lösung mit dem genannten Tool ist äußerst fragwürdig. Eine Datei ist schließlich nicht ohne Grund gesperrt.

Ich gehe mal davon aus, daß Du mittels FindFirst/FindNext den Verzeichnisbaum abscannst. Wenn Du nun unter definierten Umständen ein gefundenes Verzeichnis löschen möchtest, so mußt Du zuvor die Suche mit einem Findclose beenden. Dann wird auch das Handle zerstört und Du kannst Das Verzeichnis löschen.

Hope it helps

ansonsten: gib mal ein bißchen Code, dann gucke ich gerne mal drüber

onlinekater
Thomas Breitkreuz
  Mit Zitat antworten Zitat
delphinia

Registriert seit: 16. Feb 2006
444 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Verzeichnis löschen...

  Alt 26. Mär 2006, 14:12
Danke das Findclose hat geholfen wie ein wunder *danke*

Aber hier dennoch mal der code


Delphi-Quellcode:
procedure LV_InsertFiles(strPath: string; ListView: TlistView; ImageList: TImageList);
var
  i: Integer;
  SearchRec: TSearchRec;
  ListItem: TListItem;
  FileInfo: SHFILEINFO;
begin
  ListView.Items.BeginUpdate;

  try
    i := FindFirst(strPath + '*.*', faAnyFile, SearchRec);
    while i = 0 do
    begin
      with ListView do
      begin
        if ((SearchRec.Attr and FaDirectory <> FaDirectory) and
          (SearchRec.Attr and FaVolumeId <> FaVolumeID)) then
        begin
          ListItem := ListView.Items.Add;

          SHGetFileInfo(PChar(strPath + SearchRec.Name), 0, FileInfo, SizeOf(FileInfo), SHGFI_DISPLAYNAME);
          Listitem.Caption := FileInfo.szDisplayName;

          Application.ProcessMessages;
        end;
      end;
      i := FindNext(SearchRec);
    end;
  finally
    ListView.Items.EndUpdate;
    Findclose(SearchRec); <---- nun eingefügt
  end;
end;
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Verzeichnis löschen...

  Alt 26. Mär 2006, 14:26
Moin Doreen,

Du hast da allerdings noch ein kleines strukturelles Problem.
Das FindClose wird in jedem Falle aufgerufen, auch wenn FindFirst fehlschlägt, und somit nichts zu schliessen ist.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
delphinia

Registriert seit: 16. Feb 2006
444 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Verzeichnis löschen...

  Alt 26. Mär 2006, 14:28
hmmm das heisst das FindClose muss wo anders hin - und wenn ich es mir so anscheun inter das "i := FindNext(SearchRec); "..?!
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.889 Beiträge
 
Delphi 12 Athens
 
#9

Re: Verzeichnis löschen...

  Alt 26. Mär 2006, 14:40
nein, das FindClose steht schon an der richtigen Stelle.
[Edit]
Die Stelle, die Du eben vorgeschlagen hast, würde die Suche immer nach dem zweiten ergebnis beenden und dann unweigerlich zum Fehler führen.
[Edit/]
Du soltest das Findfirst in die Zeile vor dem try setzen.
@Christin Seehase Ein FindClose ist auch dann angesagt, wenn das FindFirst fehlschlägt:

Auszug aus SysUtils:

Delphi-Quellcode:
function ForceDirectories(Dir: string): Boolean;

{ FindFirst searches the directory given by Path for the first entry that
  matches the filename given by Path and the attributes given by Attr. The
  result is returned in the search record given by SearchRec. The return
  value is zero if the function was successful. Otherwise the return value
  is a system error code. After calling FindFirst, always call FindClose.
  FindFirst is typically used with FindNext and FindClose as follows:

    Result := FindFirst(Path, Attr, SearchRec);
    while Result = 0 do
    begin
      ProcessSearchRec(SearchRec);
      Result := FindNext(SearchRec);
    end;
    FindClose(SearchRec);

  where ProcessSearchRec represents user-defined code that processes the
  information in a search record. }
Gruß

Thomas
Thomas Breitkreuz
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Verzeichnis löschen...

  Alt 26. Mär 2006, 14:53
@onlinekater: Ein FindClose ist nur dann notwendig wenn FindFirst klappt. Ansonsten ist das zurückgelieferte Handle innerhalb der Struktur 0 und muss somit nicht frei gegeben werden. Allerdigns prüft FindClose ob eben dieses Handle 0 ist und gibt es dann nicht frei. Es ist aber eben sinnvoller FindClose nur aufzurufen wenn es wirklich aufgerufen werden muss. Schließlich ruft man ja auch nicht 10 mal hintereinander FreeAndNil auf nur weil es eben geht. Man sollte eine Funktion generell nur aufrufen wenn es sinn macht und das ist bei FindClose eben nur der Fall wenn FindFirst erfolgreich war. Ansonsten ist es einfach nur ein überflüssiger Aufruf der unnötig Rechenschritte kostet.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  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 06:01 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