Domanda

Ho un programma che ho scritto in C #, che carica un'immagine con Image.FromFile, e carica l'immagine con successo ogni volta. Tuttavia, quando si trascina un altro file sul file eseguibile, come si stanno dando il programma l'argomento della riga di comando del file, e il file non si trova nella stessa cartella del file eseguibile, il programma si blocca perché dice il percorso del file non esiste, anche se lo fa.

Credo che facendo cadere un file sul file eseguibile, che sta cambiando il percorso che di caricare le immagini da qualche modo. Come posso risolvere questo problema?

È stato utile?

Soluzione

Il programma sarebbe iniziato con un Environment.CurrentDirectory diverso. Assicurarsi sempre di caricare i file con un nome di percorso assoluto (cioè non uso Image.FromFile ( "blah.jpg")).

Per ottenere il percorso assoluto a un file che è memorizzato nella stessa directory del file EXE, è possibile utilizzare Application.StartupPath per esempio. O Assembly.GetEntryAssembly (). Posizione, se non si utilizza Windows Form.

Altri suggerimenti

Dipende da come si sta avviando l'esterno file di trascinamento della vostra applicazione. Se si fa clic e trascina un file da Windows Explorer, il completo percorso assoluto è incluso nella goccia. In questo caso i seguenti spettacoli codice il nome del file ed esegue una goccia del contenuto del file in una casella di testo:

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();
        }
    }
}

Quindi fateci sapere di più sulla tua fonte di trascinamento. Molto probabilmente si dovrà modificare la vostra fonte per trascinare il percorso assoluto, o in qualche modo determinare il percorso completo dal percorso relativo nei dati di trascinamento.

Inoltre, il programma non dovrebbe mai andare in crash a causa di dati non corretti. Sia verificare le condizioni richieste, o utilizzare un blocco try / catch in tutto il codice necessario.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top