2 Stimmen

File.Copy und WPF

Ich habe ein kleines Problem mit der Methode File.Copy in WPF, mein Code ist sehr einfach und ich erhalte eine Ausnahme, wenn ich ihn ausführe,

Konnte den Pfad 'Images\37c31987-52ee-4804-8601-a7b9b4d439fd.png' nicht finden.

wo Images ein relativer Ordner ist.

Hier ist mein Code, wie gesagt einfach und der gleiche Code funktioniert einwandfrei in einer Konsolenanwendung, kein Problem.

string filenamae = System.IO.Path.Combine(images, Guid.NewGuid().ToString() + System.IO.Path.GetExtension(imageFile)); ;
System.IO.File.Copy(imageFile, filenamae);
this.ImageLocation = string.Empty;

Also, wenn jemand helfen kann, vielen Dank.

2voto

chris166 Punkte 4781

Existiert der Bilderordner? File.Copy erstellt ihn nicht automatisch.

Wissen Sie, was Ihr aktuelles Verzeichnis ist? Datei öffnen/speichern-Boxen können das ändern. Es ist also immer sicherer, mit absoluten Pfaden zu arbeiten.

Führen Sie einen

Path.GetFullPath(filename)

durch und sehen Sie, wohin das zeigt. Ist es der richtige Ort?

0 Stimmen

Und selbst mit Ihrer Methode ist die Ausnahme immer noch vorhanden.

2voto

user112889 Punkte 795

Wenn Sie den absoluten Pfad anstelle des relativen Pfads verwenden, funktioniert es dann?

0 Stimmen

Der Ordner befindet sich im selben Verzeichnis wie die Anwendung, warum muss er absolut sein, und außerdem funktioniert es gut in einer Konsolenanwendung. Das hat mich aufgehalten. Warum? Was ist der Unterschied zwischen einer WPF-App und einer Konsolen-App?

0 Stimmen

"Warum sollte es absolut sein" - Weil dein aktuelles Verzeichnis nicht immer das gleiche sein wird wie dein EXE-Verzeichnis? Das Eingabeaufforderungsfenster ermöglicht es dir, eine EXE-Datei von einem anderen Verzeichnis als dem aktuellen zu starten. Verknüpfungen lassen dich das Startverzeichnis angeben. In beiden Fällen, willst du wirklich, dass deine Anwendung abstürzt? Relative Pfade sind fast immer eine schlechte Idee.

0 Stimmen

"Warum muss es absolut sein" - vielleicht solltest du es ausprobieren und sehen, ob es funktioniert, dann mach dir Gedanken darüber, warum es absolut sein muss.

1voto

Michael Maddox Punkte 11851

Bevor Sie auf eine Datei zugreifen, sollten Sie System.IO.File.Exists() aufrufen. Aus Ihrer Fehlerbeschreibung geht nicht klar hervor, ob die Ursprungsdatei vor dem Kopieren existiert oder nicht.

Wenn Sie keinen absoluten Pfad angeben, wird Ihr relativer Pfad oft aus unerwarteten Orten aufgelöst, in der Regel aus dem aktuellen Arbeitsverzeichnis des Prozesses. Das Aufrufen dieser Methode kann Ihnen sagen, wo der Prozess gerade läuft:

System.IO.Directory.GetCurrentDirectory()

Sie sollten niemals Annahmen über das aktuelle Arbeitsverzeichnis eines laufenden Prozesses machen, da der Benutzer Ihr Programm von überall aus starten könnte. Selbst wenn Sie glauben, dass Sie immer das aktuelle Arbeitsverzeichnis kontrollieren, werden Sie überrascht sein, wie oft Sie falsch liegen.

0 Stimmen

Das Hinzufügen von System.IO.File.Exists ist die beste Methode, um vor dem Zugriff auf eine Datei zu prüfen. Dies verhindert Ausnahmen, die Zeit und Ressourcen verbrauchen.

0voto

Benjol Punkte 60397

Hast du einen Debugger? Warum setzt du nicht einen Haltepunkt ein und überprüfst die Werte, die bei jedem Schritt verwendet werden?

Wenn das Dateisystem sagt "Datei nicht gefunden", würde ich nicht versuchen, mit ihm zu diskutieren...

0 Stimmen

Beide Werte sind korrekt. Tatsächlich funktioniert es in einer Konsolen-App einwandfrei.

0 Stimmen

Wenn du von einer Konsolenanwendung sprichst, meinst du damit keine "WinForms-Anwendung" oder meinst du "im Debug-Modus"? Wie auch immer, versuche die Werte in das Ereignisprotokoll zu schreiben, wenn dein Code NICHT funktioniert...

0voto

csensoft Punkte 323

Verwenden Sie \\ für das Dateiverzeichnis, wenn es lokal ist. Wenn sich Ihre Datei im Netzwerkpfad befindet, verwenden Sie \\\\(zuerst) damit es nach dem Netzlaufwerk sucht.

Danke

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X