AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Alle Dateien eines Verzeichnisses löschen ?!?
Thema durchsuchen
Ansicht
Themen-Optionen

Alle Dateien eines Verzeichnisses löschen ?!?

Ein Thema von Trouble_Maker · begonnen am 19. Mär 2003 · letzter Beitrag vom 23. Aug 2003
Antwort Antwort
Seite 2 von 3     12 3      
Marlno

Registriert seit: 17. Aug 2003
11 Beiträge
 
#11

Re: Alle Dateien eines Verzeichnisses löschen ?!?

  Alt 23. Aug 2003, 14:17
hab da mal ne frage hierzu.....
und zwar wenn ich die procedur aufrufe gibts 2 sachen die mich wundern (ich habe deshalb aus der procedur ne funktion mit integer rückgabewert gemacht zur überprüfung der anzahl)

wenn ich diese procedur/funktion benutze erhalte ich bei dem aufruf mit zb *.dat ein ergebnis wobei aber die aller erste .dat datei nicht gelöscht wird auch wenn nur eine einzige dat datei im verzeichnis liegt wird sie nie gelöscht (in meiner function deshalb auch integer 0)

zweitens wenn ich das aufrufe mit *.* dann wird mir immer eine (mein rückgabewert) höhere zahl angegeben als vorhanden das heißt bei 3 dateien sind es 4 und wenn gar keine datei drin ist dann trotzdem 1..

das kann doch nicht hinhauen
was ist denn das????
testet das doch mal bei euch..
kann jemand helfen???

ps es geht nicht um die umwandlung von procedur in function sondern um das abarbeiten der original procedur siehe oben...

greetz Marlno
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: Alle Dateien eines Verzeichnisses löschen ?!?

  Alt 23. Aug 2003, 14:22
Sei doch mal so gut und poste Deinen geänderten Code

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Marlno

Registriert seit: 17. Aug 2003
11 Beiträge
 
#13

Re: Alle Dateien eines Verzeichnisses löschen ?!?

  Alt 23. Aug 2003, 14:25
ich wusste das das kommt
aber schau mal was ich einen posting vorhergeschrieben habe....

Zitat:
ps es geht nicht um die umwandlung von procedur in function sondern um das abarbeiten der original procedur siehe oben...
falls du dennoch was willst schreibs dir um mach einfach function rückgabewert ein integer

in der while schleife nen zähler
und ganz am ende ein Result


greetz Marlno
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: Alle Dateien eines Verzeichnisses löschen ?!?

  Alt 23. Aug 2003, 14:31
Wenn ich mir die umschreibe, funktioniert es ohne Probleme. Deshalb sollst Du ja auch DEINEN Code posten

......

P.S.: Ich habe Deinen Beitrag durchaus vollständig gelesen.
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Marlno

Registriert seit: 17. Aug 2003
11 Beiträge
 
#15

Re: Alle Dateien eines Verzeichnisses löschen ?!?

  Alt 23. Aug 2003, 14:37
achso wusste ich ja nicht hättest du aber ruhig sagen können.... zb so

hi
wenn ich mir das umschreibe funktioniert es wunderbar

naja egal....

poste du doch auch einfach mal deins dann kanns jeder sehen *fg*


Bold sind die neuen

Code:
[b]Function[/b] DeleteAll(Dir, Files : string): [b]Integer[/b];
var
SearchRec : TSearchRec;
[b]ergebnis:integer;[/b]
begin
[b]ergebnis:=0;[/b]
if FindFirst(Dir+Files, faAnyFile, SearchRec) = 0 then
begin
DeleteFile(SearchRec.Name);
while FindNext(SearchRec) = 0 do
[b]begin[/b]
DeleteFile(Dir + SearchRec.Name);
[b]ergebnis:=ergebnis + 1;[/b]
[b]end;[/b]
end;
FindClose(SearchRec);
[b]Result:=ergebnis;[/b]
end;

so... aber sag mal wenn du 10 .dat dateien in ein ordner tust und die function oder die alte procedur mit *.dat aufrufst löscht er alle 10 ???
bei mir nämlich nur 9.

greetz Marlno

[edit=sakura]PRE-Tags gesetzt. Mfg, sakura[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#16

Re: Alle Dateien eines Verzeichnisses löschen ?!?

  Alt 23. Aug 2003, 14:44
So, zwei kleine Fehlerchen sind da noch... waren die oben auch

Code:
Function DeleteAll(Dir, Files : string): Integer;
var
  SearchRec : TSearchRec;
  ergebnis:integer;
begin
  ergebnis:=0;
  if FindFirst(Dir+Files, faAnyFile, SearchRec) = 0 then
  begin
    DeleteFile([color=#ff0012]Dir+[/color]SearchRec.Name);
    [color=#ff0012]ergebnis:=ergebnis + 1;[/color]
    while FindNext(SearchRec) = 0 do
    begin
      DeleteFile(Dir + SearchRec.Name);
      ergebnis:=ergebnis + 1;
    end;
    [color=#ff0012]FindClose(SearchRec); [/color]
  end;
  [s][color=#ff0012]FindClose(SearchRec); [/color][/s]
  Result:=ergebnis;
end;
P.S. FindClose sollte nur ausgeführt werden, wenn FindFirst erfolgreich war. Einige Delphi-Versionen verursachen auf einigen OS sonst AV.

Du kannst in Delphi/Pascal anstatt mit Ergebniss gleich mit Result arbeiten.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Alle Dateien eines Verzeichnisses löschen ?!?

  Alt 23. Aug 2003, 15:24
Moin MarIno,

ausserdem könnte ein Resourcenschutzblock (try/finally) nicht schaden, um die Freigabe der belegten Resourcen sicherzustellen.
Bei Verwendung einer repeat/until Schleife wird das Ganze dann auch noch übersichtlicher.

Besonders wichtig:
Bei DeleteFile den genauen Pfad angeben (wie sakura ja schon geschrieben hat), da ansonsten wohl im aktuellen Arbeitsverzeichnis gelöscht wird, falls dort zufällig gleichnamige Dateien liegen sollten.

Delphi-Quellcode:
Function DeleteAll(Dir, Files : string): Integer;

var
  SearchRec : TSearchRec;

begin
  Result := 0;
  if FindFirst(Dir+Files, faAnyFile, SearchRec) = 0 then begin
    try
      repeat
        DeleteFile(Dir+SearchRec.Name);
        inc(Result);
      until FindNext(SearchRec) <> 0;
    finally
      FindClose(SearchRec);
    end;
  end;
end;
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
Marlno

Registriert seit: 17. Aug 2003
11 Beiträge
 
#18

Re: Alle Dateien eines Verzeichnisses löschen ?!?

  Alt 23. Aug 2003, 15:37
hey ja ihr habt ja beide recht....
und ja das war oben in der ersten version schon so.. die war ja nicht von mir ich dachte nur ich kann sie gebrauchen und mache einfach ne funktion draus mit der anzahl was ja auch ging also ich habe keine fehler gemacht die waren schon...

aber finde es klasse das man alte sachen verbessert auch hier im forum...

so nun zum löschen
eines geht jetzt wunderbar

nämlich das *.dat jetzt werden nämlich alle .dat datein gelöscht auch wenn nur eine vorhanden ist supi freu

nur doof ist das jetzt nicht immer eins höher ist sondern 2 höher im result beim aufruf *.*
naja egal wenn verzeichnisse drin wären würde ich es verstehen denn die zählt er ja auch mit aber es sind keine drin und auch keine versteckten oder system files oder sonstiges....

muss ich halt wenn *.* aufgerufen wird einfach 2 abziehen oder wenns viele files sind fällt das nicht mehr auf *hilfe bug*

naja zumindest die idee mit dem try finally ist gut...

wenn ihr sonst noch lösungen habt dann würde ich mich freuen...

greetz Marlno
  Mit Zitat antworten Zitat
Brüggendiek

Registriert seit: 13. Dez 2002
Ort: Dortmund
275 Beiträge
 
Delphi 5 Standard
 
#19

Re: Alle Dateien eines Verzeichnisses löschen ?!?

  Alt 23. Aug 2003, 23:13
Hallo Marlno!

Zitat von Marlno:
nur doof ist das jetzt nicht immer eins höher ist sondern 2 höher im result beim aufruf *.*
naja egal wenn verzeichnisse drin wären würde ich es verstehen denn die zählt er ja auch mit aber es sind keine drin und auch keine versteckten oder system files oder sonstiges....
Natürlich hast Du im Verzeichnis 2 Unterverzeichnisse - die heißen '.' und '..'! Probier mal in der DOS-Eingabeaufforderung DIR aus - da siehst Du es (außer im Hauptverzeichnis der Platte).
Bei dem geposteten Code werden die 'gelöscht' (das geht nicht, DeleteFile löscht nur Dateien, für leere Verzeichnisse ist RemoveDir zuständig).

Folgendes sollte klappen:
Delphi-Quellcode:
Function DeleteAll(Dir, Files : string): Integer;

var
  SearchRec : TSearchRec;

begin
  Result := 0;
  if FindFirst(Dir+Files, faAnyFile, SearchRec) = 0 then begin
    try
      repeat
        if (SearchRec.Attr and faDirectory) <> faDirectory then //einfügen
        begin //einfügen
          DeleteFile(Dir+SearchRec.Name);
          inc(Result);
        end; //einfügen
      until FindNext(SearchRec) <> 0;
    finally
      FindClose(SearchRec);
    end;
  end;
end;
Dann werden nur Dateien gelöscht, die keine Directorys sind. Nach dem neu einzufügenden "end" kannst Du auch noch, wenn der Namen ungleich '.' und ungleich '..' ist, die Funktion rekursiv aufrufen, um Unterdirs zu löschen! Nach dem Löschen der Dateien kannst Du ja Removedir versuchen.

Gruß

Dietmar Brüggendiek
Edit: warum geht im Delphi-Source kein Color??
Dietmar Brüggendiek
  Mit Zitat antworten Zitat
Marlno

Registriert seit: 17. Aug 2003
11 Beiträge
 
#20

Re: Alle Dateien eines Verzeichnisses löschen ?!?

  Alt 23. Aug 2003, 23:24
hey klasse werd ich nacher mal ausprobieren
was so alles entsteht wenn man nur probieren wollte 8)

hey ja du hast recht die alten "dos" verzeichnisse hab ich vergesse
ich weiß das es . und .. gibt bestes beispiel cd.. eine ebene höher
und die bezeinung "dos" war nur darauf bezogen das man diese unter win einfach vergisst.....

*g*

danke das ist die lösung wie ich nicht selber draufgekommen bin *peinlich* dabei programmiert man doch schon seit jahren.. *grummel*

thx
greetz Marlno
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 07:12 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