AGB  ·  Datenschutz  ·  Impressum  







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

Verzeichnis im Startmenü löschen

Ein Thema von moelski · begonnen am 7. Jul 2009 · letzter Beitrag vom 7. Jul 2009
Antwort Antwort
Seite 2 von 2     12   
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#11

Re: Verzeichnis im Startmenü löschen

  Alt 7. Jul 2009, 14:25
Moin !

In FileList[j] steht der ganze Pfad also z.B.
C:\Dokumente und Einstellungen\All Users\Startmenü\Programme\LogView V2 Test\Binary\PortmonXP

Einen Wechsel mache ich nicht. Mein Verzeichnis löschen schaut so aus:
Delphi-Quellcode:
  for j := FileList.Count -1 downto 0 do begin
    if IsFolderEmpty(FileList[j]) then begin
      Log('Löschen leeres Verzeichnis : ' + FileList[j], ClMaroon, True);

      Log('Löschen : ' + IntToStr(ShellDelete(FileList[j])), clRed, True);
      //if NOT RemoveDir(FileList[j]) then
      // Log('Problem beim Löschen : ' + SysErrorMessage(GetLastError), clRed, True);
    end;
  end;
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
659 Beiträge
 
Delphi 12 Athens
 
#12

Re: Verzeichnis im Startmenü löschen

  Alt 7. Jul 2009, 14:55
Versuch doch trotzdem einfach mal vor dem Löschen des Verzeichnisses in ein anderes Verzeichnis zu wechseln, vielleicht setzt ja "irgendwas" das Verzeichnis, in dem du die Datei löschst, als aktives Verzeichnis.

Bis denn
Bommel
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#13

Re: Verzeichnis im Startmenü löschen

  Alt 7. Jul 2009, 15:09
Moin !

Ich habe schon versucht mittels SetCurrentDir das Verzeichnis umzusetzen auf den normalen Anwendungspfad unter C:\Programme\...
Hat aber auch nix genutzt.

Und wenn ich mit GetCurrentDir eine Abfrage mache wo ich stehe wenn ich den Ordner löschen will, dann stehe ich irgendwo unter
C:\Dokumente und Einstellungen\Administrator\Eigene Dateien
Also nicht in dem Verzeichnis was ich löschen möchte.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#14

Re: Verzeichnis im Startmenü löschen

  Alt 7. Jul 2009, 20:37
Moin !

Ich bin einen Schritt weiter.
Bevor ich die Verzeichnisse Lösche, lösche ich die darin befindlichen Shortcuts.
Dafür erzeuge ich eine Liste mit allen *.LNK Files.

Der Code schaut so:
Delphi-Quellcode:
  FileList := TStringList.Create;
  ReadAllFilesInDir(GetSpecialFolder(handle, DirCSIDL) + '\' + AppName + '\*.lnk', FileList);
Und der Code für ReadAllFilesInDir ...
Delphi-Quellcode:
Procedure ReadAllFilesInDir(mask: string; Var Liste : TStringList);
var
  search : TSearchRec;
  directory : string;
begin
  directory := ExtractFilePath(mask);

  // find all files
  if FindFirst(mask, $23, search) = 0 then
  begin
    repeat
      // add the files to the listbox
      if (lowercase(search.Name) <> 'make.exe') AND
         (lowercase(search.Name) <> 'install.xml') then
        Liste.Add(ExpandFileName(directory + search.Name));
    until FindNext(search) <> 0;
  end;

  // Subdirectories/ Unterverzeichnisse
  if FindFirst(directory + '*.*', faDirectory, search) = 0 then
  begin
    repeat
      if ((search.Attr and faDirectory) = faDirectory) and (search.Name[1] <> '.') then
        ReadAllFilesInDir(directory + search.Name + '\' + ExtractFileName(mask), Liste);
    until FindNext(search) <> 0;
    FindClose(search);
  end;
end;
Nachdem das ReadAllFilesInDir gelaufen ist habe ich auf dem Verzeichnis ein Handle. Und das bleibt auch bestehen wenn ich zu dem Codeteil komme wo ich das Verzeichnis löschen möchte.
Wenn ich das File Handle manuell per Process Explorer lösche, dann klappt auch das löschen des Verzeichnisses!

Frage also ...
Was erzeugt in dem obrigen Code ein Filehandle und wie kann ich das wieder los werden?

Anbei noch eine Grafik ...
Miniaturansicht angehängter Grafiken
handle_850.png  
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#15

Re: Verzeichnis im Startmenü löschen

  Alt 7. Jul 2009, 20:41
.. wenn das Verzeichnis keine Unterverzeichnisse hat, wird findClose nicht aufgerufen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Verzeichnis im Startmenü löschen

  Alt 7. Jul 2009, 20:44
innerhabl des ersten if-blocks (FindFirst) rufst du nirgends FindClose auf.
Warum rufst du eigentlich 2 mal FindFirst auf, für Dateien und Verzeichnisse getrennt? Warum nicht nur ein einziges mal aufrufen und anhand des Attributes entscheiden ob es ein Ordner ist oder nicht.
Was auch komisch ist das du einmal $23 nimmst und im zweiten Fall mit Konstanten arbeitest. Warum nimmst du nicht generell Konstanten oder generell keine Konstanten?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#17

Re: Verzeichnis im Startmenü löschen

  Alt 7. Jul 2009, 21:06
Moin !

Ich muss zu meiner Schande gestehen das die Funktion nicht von mir ist. Insofern kann ich die Fragen warum dies und das so und so gelöst wurde nicht beantworten
Mit dem FindClose funktioniert die Sache nun aber schon mal Fehlerfrei

Werde dann mal die Funktion etwas umschreiben .... 8)

Soweit aber erstmal vielen Dank für die Hilfe !!
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#18

Re: Verzeichnis im Startmenü löschen

  Alt 7. Jul 2009, 21:59
Moin !

So nun schaut das schon etwas universeller und läuft ohne Fehler

Delphi-Quellcode:
Procedure ReadAllFilesInDir(mask: string; Var Liste : TStringList;
                            readFolder, readFiles : Boolean);
var sr : TSearchRec;
    directory : string;
begin
  directory := ExtractFilePath(mask);

  if FindFirst(mask, faAnyFile, sr) = 0 then
  begin
    repeat
      if (lowercase(sr.Name) <> 'make.exe') and
         (lowercase(sr.Name) <> 'install.xml') and
         (sr.Name <> '.') and
         (sr.Name <> '..') and
         ((sr.Attr and faDirectory) <> faDirectory) then
        if readFiles then
          Liste.Add(ExpandFileName(directory + sr.Name));

      if ((sr.Attr and faDirectory) = faDirectory) and
         (sr.Name <> '.') and
         (sr.Name <> '..') then begin
        if readFolder then
          Liste.Add(ExpandFileName(directory + sr.Name));
        ReadAllFilesInDir(directory + sr.Name + '\' + ExtractFileName(mask), Liste, readFolder, readFiles);
      end;
    until FindNext(sr) <> 0;
    FindClose(sr);
  end;
end;
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  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 00:40 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