Frage

Ich habe ein Programm, das ich in C # geschrieben habe, welche Lasten ein Bild mit Image.FromFile, und es lädt das Bild erfolgreich jedes Mal. Wenn Sie jedoch ziehen und eine andere Datei auf die ausführbare Datei löschen, wie Sie das Programm die Befehlszeilenargument der Datei geben, und die Datei nicht im selben Ordner wie die ausführbare Datei, stürzt das Programm, weil es den Pfad zu der sagt Datei nicht existiert, auch wenn es der Fall ist.

Ich denke, dass eine Datei auf die ausführbare Datei durch Fallenlassen, es ändert sich der Pfad seinen Laden von Bildern aus irgendwie. Wie kann ich dieses Problem beheben?

War es hilfreich?

Lösung

Ihr Programm würde mit einem anderen Environment.CurrentDirectory gestartet werden. Achten Sie immer darauf laden Sie Dateien mit einem absoluten Pfadnamen (d nicht Verwendung Image.FromFile ( "blah.jpg")).

Um den absoluten Pfad zu einer Datei, die im selben Verzeichnis wie die EXE gespeichert ist, können Sie Application.StartupPath zum Beispiel nutzen könnten. Oder Assembly.GetEntryAssembly (). Location, wenn Sie Windows Forms nicht.

Andere Tipps

Es hängt davon ab, wie Sie die Datei per Drag außerhalb Ihrer Anwendung initiieren. Wenn Sie eine Datei aus dem Windows Explorer klicken und ziehen Sie die Voll absoluten Pfadnamen ist in der Drop enthalten. In diesem Fall werden die folgenden Code zeigt die Dateinamen und führt einen Tropfen der Inhalt der Datei in ein Textfeld:

private void textBox1_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
        e.Effect = DragDropEffects.Copy;
}

private void textBox1_DragDrop(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
    {
        var objPaths = (string[])(e.Data.GetData(DataFormats.FileDrop));
        if (objPaths != null && objPaths.Length > 0 && File.Exists(objPaths[0]))
        {
            MessageBox.Show(string.Format("Filename: {0}", objPaths[0]));
            using (TextReader tr = new StreamReader(objPaths[0]))
                textBox1.Text = tr.ReadToEnd();
        }
    }
}

Lassen Sie uns also mehr über Ihre Drag-Quelle wissen. Wahrscheinlich müssen Sie Ihre Quelle ändern den absoluten Pfad ziehen, oder irgendwie den vollständigen Pfad von dem relativen Pfad in den Schleppdaten zu bestimmen.

Auch Ihr Programm sollte nie auf schlechte Daten durch abstürzen. Entweder überprüfen Sie die erforderlichen Bedingungen, oder einen try / catch-Block um den erforderlichen Code verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top