Entwickler-Ecke

IO, XML und Registry - ein verzeichnis durchsuchen / alle daten in dem verzeich...


shil - Mo 29.01.07 10:18
Titel: ein verzeichnis durchsuchen / alle daten in dem verzeich...
...nis löschen

Hallo,
kann mir wer einen tip geben wie ich die dateinamen von dateien in einem bestimmten verzeichnis mir holen kann.
desweiteren würde ich gerne alle dateien in einem verzeichnis löschen, gibt es dafür eine spezielle möglichkeit?


Moderiert von user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Mo 29.01.2007 um 10:01


jasocul - Mo 29.01.07 10:58

Siehe :
Directory.GetFiles
und zum Löschen in einer Schleife:
File.Delete oder FileInfo.Delete

Oder Du löscht das ganze Verzeichnis:
Directory.Delete(<DeinPfad>,<MitUnterverzeichnissen>)
Ich bin mir aber nicht sicher, ob das Verzeichnis gelöscht werden kann, wenn Dateien enthalten sind.


shil - Do 01.02.07 12:53

ok, nu ne erweiterte frage.

ich habe schon man was geschrieben


C#-Quelltext
1:
2:
 
Directory.Delete(Path, true);


es löscht mir das verzeichns auch wenn dateien enthalten sind.
nur wenn ich jetzt eine schreibgeschüzte datei in dem verzeichnis habe wird eine ausnahme ausgelöst. ich will aber das er auch diese datei löscht. wie kann ich das am besten anstellen?


jasocul - Do 01.02.07 13:06

Zwei Varianten:
1. Du nimmst Directory.GetFiles und prüfst die Attribute aller Dateien. Falls ein störendes Attribut vorliegt, musst Du das neu setzen. Geht vermutlich mit "File" oder "FileInfo". Danach löscht Du das Verzeichnis.
2. Du löscht die Dateien einzeln. Natürlich auch mit Attribut-Prüfung oder Exception-Handling. Auch hier zum Schluß das Verzeichnis löschen.

In beiden Fällen musst Du rekursiv arbeiten, damit Du auch die Dateien der Unterverzeichnisse abarbeitest.

Allerdings könnte ich mir vorstellen, dass es einen Grund gibt, dass eine Datei R/O ist. Vielleicht soll/darf sie nicht gelöscht werden?


shil - Do 01.02.07 13:09

nein, das ist eine vorraus setzung an das programm, das sie genau dieses vrzeichnis löscht, egal was da drin ist.

aber noch mal zu meiner frage.
ich versteh nur bahnhof was du meinst. :<


jasocul - Do 01.02.07 14:43

Ich nehme mal an, dass Dir Rekursion ein Begriff ist. Also komme ich gleich zu den anderen Punkten.

Mit Directory.GetFiles kannst Du die Dateien eines Verzeichnisses (eine Überladung kann auch Unterverzeichnisse durchsuchen) bekommen. Der Rückgabewert ist ein String-Array.
Durch dieses String-Array läufst Du dann in einer foreach-Schleife durch.
In dieser Schleife prüfst Du dann die Attribute der Dateien. Dafür gibt es File.GetAttributes. Solltest eine Datei ein Attribut haben, dass das Löschen verhindert (z.B. ReadOnly) kannst Du die Attribute mit File.SetAttributes neu setzen. Die Attribute findest Du unter der FileAttributes-Enumeration.

Wenn Du bei GetFiles die Überladung mit den SearchOptions verwendest, musst Du nichtmal rekursiv programmieren.

Ich finde das nicht sonderlich kompliziert. Aber vielleicht ist mein Programmierergehir auch schon zu verkorkst. :wink:


shil - Do 01.02.07 16:11

thx, aber hat sich alles erledigt


Christian S. - Do 01.02.07 16:13

Dann sage bitte auch, wie sich das erledigt hat, damit alle was davon haben!