2008-11-05 36 views
66

Ich habe ein Junk-Verzeichnis, wo ich Downloads, einmalige Projekte, E-Mail-Entwürfe und andere Dinge, die für ein paar Tage nützlich sein können, aber nicht für immer gespeichert werden müssen. Um dieses Verzeichnis davon abzuhalten, mein Gerät zu übernehmen, schrieb ich ein Programm, das alle Dateien löscht, die älter als eine bestimmte Anzahl von Tagen sind, und einige Statistiken über die Anzahl der gelöschten Dateien und ihre Größe nur zum Spaß aufzeichnet.Wie lösche ich eine schreibgeschützte Datei?

Ich bemerkte, dass ein paar Projektordner viel länger lebten, als sie sollten, also begann ich nachzuforschen. Insbesondere schienen Ordner für Projekte, in denen ich SVN benutzt hatte, herumzuhängen. Es stellt sich heraus, dass die schreibgeschützten Dateien in den .svn-Verzeichnissen nicht gelöscht werden. Ich habe gerade einen einfachen Test für eine schreibgeschützte Datei durchgeführt und festgestellt, dass System.IO.File.Delete und System.IO.FileInfo.Delete keine schreibgeschützte Datei löschen.

Es ist mir egal, Dateien in diesem bestimmten Verzeichnis zu schützen; Wenn etwas Wichtiges drin ist, ist es am falschen Ort. Gibt es eine .NET-Klasse, die schreibgeschützte Dateien löschen kann, oder muss ich nach schreibgeschützten Attributen suchen und sie entfernen?

+2

Ich habe die Antwort akzeptiert, weil Gulzars Codebeispiel ist detaillierter als Tim Stewarts. Ich hätte das zuerst wählen sollen, aber aus irgendeinem Grund mochte ich Tim besser. Menschen sind seltsame Dinge! – OwenP

+4

+1 für die Zeit, die Dinge im Universum ein bisschen mehr richtig zu machen. Wenn nur meine Entwickler zurückgehen und unsere eigenen kleinen Verfehlungen korrigieren würden, wären wir in der Lage, die Remedial Programming-Kurse zu stornieren! –

Antwort

133

einige Beispiel-Code zu Tims Antwort hinzu:

using System.IO; 

File.SetAttributes(filePath, FileAttributes.Normal); 
File.Delete(filePath); 
+0

Sie erhalten eine positive Bewertung dafür, dass Sie Recht haben, aber Ihre Antwort kam nach Tim Stewarts, die dasselbe sagte. – OwenP

+3

das ist in Ordnung. Tim hat es verdient. dachte, dass ein Code hilft. –

+0

In einigen Fällen müssen Sie möglicherweise auch die Datei übernehmen, bevor Sie das schreibgeschützte Flag löschen oder löschen können. Weitere Informationen finden Sie unter http://stackoverflow.com/questions/12999272/. –

2

Warum müssen Sie überprüfen? Löschen Sie das schreibgeschützte Flag einfach und löschen Sie die Datei.

1

Hm, ich glaube, ich eher

>del /F * 

in eine eingeplante Aufgabe gestellt hatte. Möglicherweise um eine Stapeldatei zur Protokollierung von Statistiken gewickelt.

Fehle ich etwas?

+0

Ja. Er möchte eine Datei löschen, wenn sie ein bestimmtes Alter hat. Nicht alle Dateien in jeder Periode. –

+0

Er möchte nicht alle Dateien löschen, nur alle Dateien, die älter als eine bestimmte Zeit sind. –

16

Das Äquivalent, wenn Sie mit einem FileInfo Objekt passieren zu arbeiten ist:

file.IsReadOnly = false; 
file.Delete(); 
Verwandte Themen