![]() |
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.^^
|
Re: Ordner löschen
Hol tief Luft und dann stell die Frage noch einmal so, dass ich sie auch verstehe. Welcher Unterordner z.B.
|
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^^ |
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.
|
Re: Ordner löschen
Ok, gut also es gibt ja einen Ordner darin sind Unterodner aber in denen selber sind höchstens Datein.
|
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.
|
Re: Ordner löschen
![]() 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. |
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.
|
Re: Ordner löschen
Zitat:
![]()
Delphi-Quellcode:
Danke. :coder2:
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. |
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; |
Re: Ordner löschen
Zitat:
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. |
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.
|
Re: Ordner löschen
Also wenn ichs so mache
Delphi-Quellcode:
sagt er:
DeleteDirRecursive('C:\Dokumente und Einstellungen\Sebastian\Desktop\Programmieren\Mysqlconnect\Pics\testtttt\', nil);
Zugriffsverletzung bla... |
Re: Ordner löschen
Delphi-Quellcode:
Und so?
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; [edit] Bedingung geändert, machte so keinen Sinn [/edit] |
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?
|
Re: Ordner löschen
Das war so gedacht. Aber Du kannst das ja auch noch überarbeiten.
|
Re: Ordner löschen
Habs selbst hinbekommen, danke.
|
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:
Ich will, dass Colum 1 und 2 zusammengefügt werden, z.B. Max (in dem 1.) und Mustermann in dem 2.
for i:= 0 to combobox1.Items.Count -1 do
combobox1.AddItem(test.Items.Item[0]);// Hier ist definitiv der Fehler. 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: |
Re: Ordner löschen
up. :coder:
|
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:
Allerdings solltest Du hier dringend eine Fehlerbehandlung einbauen, falls sich die Anzahl der Items doch mal unterscheiden sollte.
for i := 0 to ComboBox1.Items.Count - 1 do
ComboBox1.Items[i] := ComboBox1.Items[i] + ' ' +ListView1.Items[i]; |
Re: Ordner löschen
Zitat:
Zitat:
|
Re: Ordner löschen
Zitat:
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. |
Re: Ordner löschen
Mach mal einen neuen Thread auf, dann antworte ich da.
|
Re: Ordner löschen
|
Re: Ordner löschen
Zitat:
|
Re: Ordner löschen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz