Laden...

[gelöst] File.copy wirft merkwürdige exeption

Erstellt von mrdjoker vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.307 Views
M
mrdjoker Themenstarter:in
125 Beiträge seit 2008
vor 14 Jahren
[gelöst] File.copy wirft merkwürdige exeption

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?

125 Beiträge seit 2008
vor 14 Jahren
M
mrdjoker Themenstarter:in
125 Beiträge seit 2008
vor 14 Jahren

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.

849 Beiträge seit 2006
vor 14 Jahren

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.

M
mrdjoker Themenstarter:in
125 Beiträge seit 2008
vor 14 Jahren

Ich habe heute erst mit dem Projekt angefangen, noch benutze ich keine Threads.

Ich habe mal nen Screenshot von meiner Methode gemacht:

297 Beiträge seit 2008
vor 14 Jahren

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.

G
146 Beiträge seit 2006
vor 14 Jahren

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

M
mrdjoker Themenstarter:in
125 Beiträge seit 2008
vor 14 Jahren

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.

2.891 Beiträge seit 2004
vor 14 Jahren

[...]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

849 Beiträge seit 2006
vor 14 Jahren

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.

S
469 Beiträge seit 2007
vor 14 Jahren

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

++++++++++++++++++++~+
Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht


Linux is for free...if your time is worth nothing
++++++++++++++++++++~+

M
mrdjoker Themenstarter:in
125 Beiträge seit 2008
vor 14 Jahren

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..