Hallo Zusammen,
ich versteh die Welt nicht mehr.
Warum wirft File.copy() eine FileNotFoundExeption:
String src = "c:\\AUTOEXEC.BAT";
String dest = "d:\\backup\\AUTOEXEC.BAT";
System.IO.File.Copy(src, dest);
Als Fehlermeldung erhalte ich
Die Datei "d:\backup\AUTOEXEC.BAT" konnte nicht gefunden werden.
Es scheint so, als würde er die Quell und Ziel Datei vertauschen.
Bin ich total blind, was mache ich falsch?
Bei FileNotFoundException steht:
sourceFileName wurde nicht gefunden.
Meine Fehlermeldung sagt aber, dass die Zieldatei nicht gefunden wurde.
Doch die soll doch erst erstellt werden, warum prüft er da, ob die vorhanden ist?
Irgendwas scheint bei mir richtig kaputt zu sein. Wenn die Zieldatei bereits besteht, dann bekomme ich mit
System.IO.File.Copy(src, dest,true);
eine IOExeption "Die Datei ist vorhanden."
Dabei sagt doch das True, dass die Datei überschrieben werden soll.
Irgendwie glaube ich auch nicht das, das das stück code ist, das den Fehler verursacht.
Arbeitest du das irgendwie in einer Schleife ab? vllt noch mit mehreren Threads? Irgendwas passt da nicht, da hast imho schon recht.
Ich habe heute erst mit dem Projekt angefangen, noch benutze ich keine Threads.
Ich habe mal nen Screenshot von meiner Methode gemacht:
Ich habe eben deinen Code bei mir ausprobiert und er funktioniert einwandfrei, sofern das Zielverzeichnis existiert und die Datei nicht vorhanden ist.
Mit
File.Copy(src, dest, true);
kannst du auf jeden Fall das letztere Problem umgehen.
Allerdings kannst du es auch einfacher haben:
string[] files = Directory.GetFiles(pfad);
foreach (string src in files)
{
FileInfo fi = new FileInfo(src);
fi.CopyTo(backupOrdner + fi.Name);
}
Gegebenenfalls musst du vorher aber dennoch den Zielordner erstellen, falls dieser nicht vorhanden ist.
There are 10 kind of people, those who understand binary and those who don't.
Datei vorhanden und Datei nicht gefunden ist aber ein Unterschied. Der Fehler im Screenshot sagt, dass die Datei bereits existiert.
Vielleicht solltest Du diese Überladung verwenden: File.Copy-Methode (String, String, Boolean)
Martin Bauer - bauer-martin.com
Ich habe eben deinen Code bei mir ausprobiert und er funktioniert einwandfrei, sofern das Zielverzeichnis existiert und die Datei nicht vorhanden ist.
Genau das ist mein Problem.
Die Methode ist sowas von simpel und funktioniert aus unerklärlichen Gründen nicht.
@gX|progs
Oh sorry, da habe ich wohl vergessen, die Zieldatei vorher zu löschen.
Selbst mit überschreiben = true bekomme ich eine IOExeption, siehe oben.
Heute Abend werde ich mal das Copy von Fileinfo probieren.
[...]und funktioniert aus unerklärlichen Gründen nicht.
Könnte es auch an einem Rechteproblem liegen? Vielleicht darf dein Programm nicht in "D:/backup" schreiben.
Gruß,
dN!3L
Glaube ich nicht, dafür ist die Fehlermeldung einfach zu eindeutig. Wenn man was nicht darf bekommt man das in 95% der fällen auch gesagt.
nur um es nochmal kurz sicherzustellen...
Schlopp hatte geschrieben
...sofern das Zielverzeichnis existiert...
Wenn du den Befehl ausführst, gibt es dann den Pfad D:\backup bereits?
Ich frage deshalb, weil Autoexec.bat sich vom Buchstabe her so anhört, als wäre sie die erste Datei, die versucht wird zu kopieren, und man ein Backupverzeichnis normalerweise vor einem neuen Backup entweder leert oder (und ich glaube diese Variante ist häufiger) komplett löscht (vielleicht machst du das sogar irgendwo in deinem Code?).
Denn File.Copy geht soweit ich weiß davon aus, dass es das Zielverzeichnis schon gibt, und es nur die Datei kopieren, aber keine Ordnerstruktur mehr anlegen muss.
Groß/Kleinschreibung ggf beachten.
Natürlich reicht in diesem Fall eine Sichtkontrolle um festzustellen, ob es D:\backup gibt, aber um den Fehler immer und verlässlich zu umgehen könntest du vor der copy-Schleife prüfen ob es existiert und falls nicht, es erstellen.
Falls D:\backup existiert und richtig geschrieben ist und alles, habe ich leider auch keine Idee, woran es liegen könnte.
gruß
sth_Weird
Linux is for free...if your time is worth nothing
Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht
++++++++++++++++++++~+
Ich versteh es nicht, jetzt funktioniert es mit einmal.
Dabei habe ich gar nichts am Quellcode/Rechner geändert.
Trotzdem Danke für eure Lösungsvorschläge!
Viel Spass beim 3. Advent..