Datei löschen Funktioniert nur mit anderen Pfad

Fridulin

Erfahrenes Mitglied
Hallo,

ich habe folgendes Problem, wenn ich den Pfad manuell setze um meine Dateien zu löschen in c:\\test beispielsweise, funktioniert es. Aber wenn ich es von System setzen lasse, funktioniert es nicht mehr obwohl es den Pfad wirklich gibt, ich hab ihn mit per MessageBox ausgeben lassen.
Mein Code:
Code:
string tempinternet = Environment.GetFolderPath(Environment.SpecialFolder.InternetCache);
//string tempinternet = "C:\test";
if (checkBox2.Checked)
{
string[] alledateien = Directory.GetFiles(tempinternet);
foreach(String dateiname in alledateien)
{
//File.SetAttributes(dateiname, FileAttributes.Normal);
File.Delete(dateiname);
}
MessageBox.Show("TempInternet: " + tempinternet);
}

Hat vielleicht einer eine Idee wieso das nicht Funktioniert, liegt es eventuell an die leerzeichen der Pfadangabe? Wenn ja wie kann man das umgehen?

Und noch ne andere Frage, weiß jemand wie man den Pfad heruasbekommt des User Temporders?

Grüße und Danke

--- Edit ---

Ich habe gerade den Fehler gefunden, er löscht ja keine Ordner mit und da die Dateien im Ordner "Content.IE5" sind kann er sie auch nicht löschen. Aber hat jemand eventuell noch eine Idee wie ich automatisch auch alle Unterverzeichnisse mit löschen kann.
Also im Internet Temp ordner alles löschen, also Ordner, unterordner und Dateien?

Danke und Viele Grüße
 
Zuletzt bearbeitet:
moin

Zum Ordner-Löschen: Versuch mal die Directory.Delete(...)-Methode.

Zum File-Löschen hab ich mal ne Frage: Liefert GetFiles die absoluten oder die relativen Pfade?

Wenn's die absoluten sind ist das Ganze kein Problem, sollten aber die realitven drin sein, musst du doch zusehen, dass du dich in dem Ordner befindest, oder irre ich mich da?

mfg broetchen
 
Hi,

Also zu deiner Frage, GetFiles liefert die vollen Pfade zurück also C:\....\...\...\diedatei.txt
Mein Problem habe ich jetzt folgendermaßen gelöst:

Code:
string tempinternet = Environment.GetFolderPath(Environment.SpecialFolder.InternetCache);
//string tempinternet = "C:\test";
if (checkBox2.Checked)
{
string[] alledateien = Directory.GetFiles(tempinternet);
string[] alleordner = Directory.GetDirectories(tempinternet);
foreach(String dateiname in alledateien)
{
if (dateiname != "index.dat")
{
File.SetAttributes(dateiname, FileAttributes.Normal);
File.Delete(dateiname);
}
}
try {
foreach(String ordnername in alleordner)
{
Directory.Delete(ordnername,true);
}
MessageBox.Show("Löschen ohne Fehler!");
}
catch
{
MessageBox.Show("Löschen erfolgreich, mit ausnahmen ein paar Fehler. Dateien werden ereits verwendet!");
}


Ber eine Frage bleibt mir noch, wenn das jemand weiß währe ich sehr Dankbar, wie kann man herausbekommen wo sich das User Temp Verzeichniss befindet. Ich möchtne nämlich ungern absolute Pfade angeben

Grüße und danke
 
Ich glaube das liegt direkt neben
Code:
Environment.SpecialFolder.LocalApplicationData
.
Bin mir jetzt aber nicht sicher.

Lass Dir doch mal alle Pfade aufeinmal ausspucken und schau dann mal nach.

Achtung:
Lass bitte die Finger von den Tempverzeichnissen! Außer Du willst jetzt nur was bestimmtes löschen.
Wenn Du alles drin löschst, wirst Du nicht mehr in der lage sein Update und Deinstallations-Prozesse bestimmter Software, welche ihre MSI's und DLL's genau dafür dort hinterlegt haben, durchzuführen.

MfG, cosmo
 
Hallo Cosmo,

Das ist leider der Pfad für die Anwendungsdaten, nicht für das Temp Verzeichniss. Auf der MSDN Seite finde ich den ja auch komischerweise nicht.

Ich will tatsächlich den ganzen Temp Ordner leeren, zurzeit mache ich es immer per Hand. Dort lagert sich viel ab mit der Zeit. Bei mir sind es zur Zeit schon wieder über 400MB wenn man vieles Deinstalliert und Installiert und ich muß sagen ich hatte eigentlich noch nie Schwierigkeiten damit, daß ich etwas nicht wieder Deinstallieren konnte. Das einzigste was passiert ist natürlich das eventuell einige Dateien geöffnet sind, die soll denn natürlich mein Programm übersprinngen.
Du mußt wissen ich habe nicht ne all zu große Festplatte

Grüße und Danke


PS: Kann wahscheinlich erst Morgen wieder schreiben.
 
Ich sagte das der Pfad daneben liegt.
Code:
System.IO.Directory.GetParent
Alles klar? ;)

Und ich meinte das es bestimmte Software gibt, die aber darauf empfindlich reagiert. Besonders MSI-Pakete.
In diesem Falle würd ich es Windows überlassen welche Temporären Dateien gelöscht werden sollen. *aua nich haun*
Jaja, schon gut. :D
Eine Alternative währen die TuneUp Utility's. Da gibt es da noch die 1-Klick Wartung welche zeigesteuert Ungültige, verweiste und überflüssige Registryeinträge
sammt nicht mehr benötigter Temporären Dateien löscht.

MfG, cosmo
 
Hi,

Also entweder ist es noch zu Früh oder ich kann nicht denken, oder beides. Ich weiß nicht wie ich das mit einbauen soll.
Code:
System.IO.Directory.GetParent
Ich habe mir auch schon die Hilfe von SharpDevelope angeschaut, leider ohne Efolg.

viele Grüße

--- Edit ---

Ich habe es jetzt endlich gefunden.
Code:
string temp = Path.GetTempPath();
Dort findet man den Temp Ordner.

Grüße und danke
 
Zuletzt bearbeitet:
Hallo Fridulin!

Das was ich meinte währe eine improvisierte Variante gewesen.
Code:
string sLokaleEinstellungen = System.Environment.GetFolderPath( System.Environment.SpecialFolder.LocalApplicationData );
DirectoryInfo DirInfo = Directory.GetParent( sLokaleEinstellungen );
DirectoryInfo[] Content = DirInfo.GetDirectories();
foreach ( DirectoryInfo Folder in Content )
	if ( Folder.Name.ToLower() == "temp" )
		DoSomethingWith( Folder.FullName );
Aber das es direkt unter Path zu finden ist, dran hab ich gar nicht mehr gedacht. Man lernt nie aus. ;)

Mach's gut, cosmo

// Edit: Ich meinte Path
 
Zuletzt bearbeitet:
Hallo Cosmo,

Achso meintest du das, jetzt verstehe ich deine Variante. Aber ich denke die Version ist noch bischen einfacher.

Grüße
 

Neue Beiträge

Zurück