Programme ne parvient pas à l'image de charge de chemin relatif à l'ouverture de fichiers glisser-déplacer

StackOverflow https://stackoverflow.com/questions/2945139

Question

J'ai un programme que je l'ai écrit en C #, qui charge une image Image.FromFile, et il charge l'image avec succès à chaque fois. Toutefois, lorsque vous glissez-déposez un autre fichier sur l'exécutable, comme vous donnez le programme l'argument de ligne de commande du fichier, et le fichier est pas dans le même dossier que l'exécutable, le programme se bloque car il dit que le chemin vers la fichier n'existe pas, même si elle le fait.

Je pense qu'en déposant un fichier sur l'exécutable, il change le chemin il de chargement des images d'une certaine façon. Comment puis-je résoudre ce problème?

Était-ce utile?

La solution

Votre programme sera lancé avec un autre Environment.CurrentDirectory. Toujours assurez-vous de charger des fichiers avec un nom de chemin absolu (par exemple ne pas utiliser Image.FromFile ( "blah.jpg")).

Pour obtenir le chemin absolu vers un fichier qui est stocké dans le même répertoire que votre EXE, vous pouvez utiliser Application.StartupPath par exemple. Ou Assembly.GetEntryAssembly (). Emplacement si vous ne pas utiliser Windows Forms.

Autres conseils

Cela dépend de la façon dont vous initiez le fichier glisser en dehors de votre application. Si vous cliquez et faites glisser un fichier à partir de Windows Explorer, le nom de chemin absolu est inclus dans la liste. Dans ce cas, le code suivant indique le nom du fichier et effectue une chute du contenu du fichier dans une zone de texte:

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

Alors, laissez-nous savoir plus sur votre source de déplacement. Très probablement, vous devrez modifier la source pour faire glisser le chemin absolu, ou déterminer en quelque sorte le chemin complet du chemin relatif dans les données glissées.

En outre, votre programme ne devrait jamais tomber en panne en raison de mauvaises données. Soit vérifier les conditions requises, ou utiliser un bloc try / catch autour du code nécessaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top