Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Ordner löschen (https://www.delphipraxis.net/103504-ordner-loeschen.html)

Seppel 16. Nov 2007 16:56


Ordner löschen
 
Hi,

Ich will einen Ordner löschen, aber gewisse unter Ordner nicht, diese liest er aus nem edit Feld aus, also den Namen und dann löscht er sie net, also noch gehts nicht^^.
Deswegen meine Frage wie geht das?

Delphi-Quellcode:
RemoveDir// das weiß ich.^^

DeddyH 16. Nov 2007 16:58

Re: Ordner löschen
 
Hol tief Luft und dann stell die Frage noch einmal so, dass ich sie auch verstehe. Welcher Unterordner z.B.

Seppel 16. Nov 2007 17:00

Re: Ordner löschen
 
ok.^^
Also ich sags so ich möchte alles in einem Ordner löschen, kann aber definniern was nicht gelöscht wird.
(z.B. im Ordner Bla sind 5 Ordner und alle außer 1 und 2 dürfen gelöscht werden)

Jetzt verstanden?, ja sry falsch formuliert^^

DeddyH 16. Nov 2007 17:03

Re: Ordner löschen
 
Wenn die Tiefe der zu löschenden Unterordner beliebig sein soll, wirst Du um eine Rekursion schwerlich herumkommen. Bedenke zudem, dass Du nur leere Ordner löschen kannst. Das heißt also, dass Du die Unterverzeichnisse durchlaufen und dort alle Dateien löschen musst. Stößt Du auf ein Unterverzeichnis, tust Du dort dasselbe.

Seppel 16. Nov 2007 17:05

Re: Ordner löschen
 
Ok, gut also es gibt ja einen Ordner darin sind Unterodner aber in denen selber sind höchstens Datein.

DeddyH 16. Nov 2007 17:08

Re: Ordner löschen
 
Gut, dann wirst Du das Dreigespann FindFirst, FindNext, FindClose anwenden müssen. Beispiele findest Du bestimmt über die Forensuche. Falls Du nicht klarkommst, melde Dich nochmal.

Seppel 16. Nov 2007 17:13

Re: Ordner löschen
 
http://www.dsdt.info/tipps/?id=68
Hab da das gefunden im Web, wenn ich im Forumsuche finde ich immer so viel.
Nur wie kann ich jetzt machen, dass es gewisse Ornder nicht löscht.

BeispieL:
Ich hab ne Datenbank, da stehen User drinne und man kann bei denen Bilder sehen.
Wenn die gelöscht werden, dann mache ich das so, dass bei beginn des PRogramms alles außer den Usern die in der DB sind gelöscht werden, also ein Vergleich und der rest muss weg.
Ist das so besser um ne Lösung zu finden, so kann man ja auch einen Vergleich machen, alles was net in der DB ist wird gelöscht.(Also z.B. C:/DB/User/ darin sind dann den Usern ihre Pics, wobei jeder User einen eigenen Ordner hat, z.B. Frank und wenn Frank gelöscht wird soll beim Start des Programms auch der Ordner gelöscht werden.

Nuclear-Ping 16. Nov 2007 17:22

Re: Ordner löschen
 
In einer Liste (Delphi Hilfe: TStringList) die nicht zu löschenden Ordner eintragen und dann vor jedem löschen erstmal den Namen bzw. Pfad des Ordners aus der Liste vergleichen, fertig.

Seppel 16. Nov 2007 17:26

Re: Ordner löschen
 
Zitat:

Zitat von Nuclear-Ping
In einer Liste (Delphi Hilfe: TStringList) die nicht zu löschenden Ordner eintragen und dann vor jedem löschen erstmal den Namen bzw. Pfad des Ordners aus der Liste vergleichen, fertig.

Gut, ich trag also die wichtigen einund wie lösche ich die dann net??
http://www.dsdt.info/tipps/?id=68 Das hier löscht alles und mit dem Vergleich weiß ich jetzt net so recht.

Delphi-Quellcode:
if DeleteFile('c:\DB\') then
//ergleiche muss ich das ja dann mit der Liste... Das eintragen darein ist net das Problem, nur das vergleichen...Also muss ich wahrscheinlich auch erst ma alles darin auslesen oder?? und dann vergleichen.
Danke. :coder2:

DeddyH 16. Nov 2007 17:34

Re: Ordner löschen
 
Evtl. so (vorsichtig beim Ausprobieren!!):
Delphi-Quellcode:
function DeleteDirRecursive(sPath: string; DoNotDelete: TStrings): Boolean;
var Rec: TSearchRec;
begin
  if not DirectoryExists(sPath) then
    begin
      Result := false;
      exit;
    end;
  sPath := IncludeTrailingPathDelimiter(sPath);
  if FindFirst(sPath + '*.*',faAnyFile,Rec) = 0 then
    begin
      repeat
        if (Rec.Attr and faDirectory) = faDirectory then
          begin
            if (Rec.Name <> '.') and (Rec.Name <> '..') and
               (*Vorsicht!! Man muss sich einig sein, wie man die
                 Verzeichnisnamen einträgt (ganzer Pfad oder nicht,
                 groß oder klein geschrieben etc.) *)
               (DoNotDelete.IndexOf(Rec.Name) < 0) then
              DeleteDirRecursive(sPath + Rec.Name,nil);
          end
        else
          DeleteFile(sPath + Rec.Name);
      until FindNext(Rec) <> 0;
      FindClose(Rec);
    end;
  Result := RemoveDir(sPath);
end;

Seppel 16. Nov 2007 17:43

Re: Ordner löschen
 
Zitat:

Zitat von DeddyH
Evtl. so (vorsichtig beim Ausprobieren!!):
Delphi-Quellcode:
function DeleteDirRecursive(sPath: string; DoNotDelete: TStrings): Boolean;
var Rec: TSearchRec;
begin
  if not DirectoryExists(sPath) then
    begin
      Result := false;
      exit;
    end;
  sPath := IncludeTrailingPathDelimiter(sPath);
  if FindFirst(sPath + '*.*',faAnyFile,Rec) = 0 then
    begin
      repeat
        if (Rec.Attr and faDirectory) = faDirectory then
          begin
            if (Rec.Name <> '.') and (Rec.Name <> '..') and
               (*Vorsicht!! Man muss sich einig sein, wie man die
                 Verzeichnisnamen einträgt (ganzer Pfad oder nicht,
                 groß oder klein geschrieben etc.) *)
               (DoNotDelete.IndexOf(Rec.Name) < 0) then
              DeleteDirRecursive(sPath + Rec.Name,nil);
          end
        else
          DeleteFile(sPath + Rec.Name);
      until FindNext(Rec) <> 0;
      FindClose(Rec);
    end;
  Result := RemoveDir(sPath);
end;

DeleteDirRecursive('C:\Dokumente und Einstellungen\Sebastian\Desktop\Programmieren\Mysq lconnect\Pics\testtttt\', '1');
Also wenn ich das z.B. eingebe dann kommt ne Fehlermeldung Inkompatible Typen TString und char, hab ich die Syntax missachtet, was ich glaube^^.
Uses dürfte eigentlich nix sein.

DeddyH 16. Nov 2007 17:55

Re: Ordner löschen
 
Als 2. Parameter musst Du eine Liste mit den Verzeichnissen angeben, die nicht gelöscht werden sollen (z.B. ComboBox.Items oder sowas). Sollen alle Verzeichnisse gelöscht werden, gibst Du einfach nil an.

Seppel 16. Nov 2007 18:03

Re: Ordner löschen
 
Also wenn ichs so mache
Delphi-Quellcode:
DeleteDirRecursive('C:\Dokumente und Einstellungen\Sebastian\Desktop\Programmieren\Mysqlconnect\Pics\testtttt\', nil);
sagt er:
Zugriffsverletzung bla...

DeddyH 16. Nov 2007 18:06

Re: Ordner löschen
 
Delphi-Quellcode:
function DeleteDirRecursive(sPath: string; DoNotDelete: TStrings): Boolean;
var Rec: TSearchRec;
begin
  if not DirectoryExists(sPath) then
    begin
      Result := false;
      exit;
    end;
  sPath := IncludeTrailingPathDelimiter(sPath);
  if FindFirst(sPath + '*.*',faAnyFile,Rec) = 0 then
    begin
      repeat
        if (Rec.Attr and faDirectory) = faDirectory then
          begin
            if (Rec.Name <> '.') and (Rec.Name <> '..') and
               (not Assigned(DoNotDelete) or
               (*Vorsicht!! Man muss sich einig sein, wie man die
                 Verzeichnisnamen einträgt (ganzer Pfad oder nicht,
                 groß oder klein geschrieben etc.) *)
               (DoNotDelete.IndexOf(Rec.Name) < 0)) then
              DeleteDirRecursive(sPath + Rec.Name,nil);
          end
        else
          DeleteFile(sPath + Rec.Name);
      until FindNext(Rec) <> 0;
      FindClose(Rec);
    end;
  Result := RemoveDir(sPath);
end;
Und so?

[edit] Bedingung geändert, machte so keinen Sinn [/edit]

Seppel 16. Nov 2007 18:09

Re: Ordner löschen
 
Ok es geht also ich hab ja jetzt mit nil gemacht, da hats auch den Ordner mitgelöscht in dem alles drin war, war das so gedacht oder nur bei nil so?

DeddyH 16. Nov 2007 18:12

Re: Ordner löschen
 
Das war so gedacht. Aber Du kannst das ja auch noch überarbeiten.

Seppel 16. Nov 2007 18:24

Re: Ordner löschen
 
Habs selbst hinbekommen, danke.

Seppel 16. Nov 2007 20:03

Re: Ordner löschen
 
Hab ne kleine Frage und zwar will ich einen gewissen Inhalt aus dem Listview in die Combobox kopieren.
Ist der Ansatz richtig und was mache ich falsch.

Delphi-Quellcode:
for i:= 0 to combobox1.Items.Count -1 do
combobox1.AddItem(test.Items.Item[0]);// Hier ist definitiv der Fehler.
Ich will, dass Colum 1 und 2 zusammengefügt werden, z.B. Max (in dem 1.) und Mustermann in dem 2.
das soll dann in der Combobox so stehen: MaxMustermann.
Wie mache ich das jetzt?

edit:
Soll ich dafür jetzt einen neuen Thread auf machen??
:duck:
:coder2:

Seppel 17. Nov 2007 08:33

Re: Ordner löschen
 
up. :coder:

DeddyH 17. Nov 2007 08:39

Re: Ordner löschen
 
Die ListView und die ComboBox haben die gleiche Anzahl an Items und das Item der ListView soll immer hinter das der ComboBox?
Delphi-Quellcode:
for i := 0 to ComboBox1.Items.Count - 1 do
  ComboBox1.Items[i] := ComboBox1.Items[i] + ' ' +ListView1.Items[i];
Allerdings solltest Du hier dringend eine Fehlerbehandlung einbauen, falls sich die Anzahl der Items doch mal unterscheiden sollte.

turboPASCAL 17. Nov 2007 08:40

Re: Ordner löschen
 
Zitat:

Soll ich dafür jetzt einen neuen Thread auf machen?
Ist eine gute Idee.

Zitat:

Zitat von Seppel
up. :coder:

Down. :gruebel:

Seppel 17. Nov 2007 08:49

Re: Ordner löschen
 
Zitat:

Zitat von DeddyH
Die ListView und die ComboBox haben die gleiche Anzahl an Items und das Item der ListView soll immer hinter das der ComboBox?
Delphi-Quellcode:
for i := 0 to ComboBox1.Items.Count - 1 do
  ComboBox1.Items[i] := ComboBox1.Items[i] + ' ' +ListView1.Items[i];
Allerdings solltest Du hier dringend eine Fehlerbehandlung einbauen, falls sich die Anzahl der Items doch mal unterscheiden sollte.

Das is net das was ich wollte, denn ich will aus dem Listview nur die Spalte Vorname und Nachname.
Diese sollen dann zusammen geschrieben in der Combobox stehen, vlt. zu unverständlich von mir ausgedrückt.

Deswegen gibts bei mir bei dem Code daoben auch einen fehler inkompatible Typen String und Tlistitem.

DeddyH 17. Nov 2007 08:50

Re: Ordner löschen
 
Mach mal einen neuen Thread auf, dann antworte ich da.

Seppel 17. Nov 2007 08:58

Re: Ordner löschen
 
Ok Diskussion geht hier(bla) weiter und der Thread kann geschlossen werden.
Danke.
:dp:

Sharky 17. Nov 2007 10:13

Re: Ordner löschen
 
Zitat:

Zitat von Seppel
... und der Thread kann geschlossen werden.

Wie so bitte soll denn der Thread geschlossen werden? :gruebel:

Seppel 17. Nov 2007 12:31

Re: Ordner löschen
 
Zitat:

Zitat von Sharky
Zitat:

Zitat von Seppel
... und der Thread kann geschlossen werden.

Wie so bitte soll denn der Thread geschlossen werden? :gruebel:

ach bin ich von anderen Foren gewöhnt, wenn kein Diskussionsbedarf ist, bzw. alles geklärt ist wird immer geschlossen, um SPAM zu vermeiden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:59 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