Программа не может загрузить изображение с относительного пути при открытии файла перетаскивания - PullRequest
0 голосов
/ 31 мая 2010

У меня есть программа, написанная на C #, которая загружает изображение с помощью Image.FromFile и успешно каждый раз загружает изображение. Однако, когда вы перетаскиваете другой файл в исполняемый файл, как вы задаете программе аргумент командной строки файла, а файл находится не в той же папке, что и исполняемый файл, программа вылетает, потому что она говорит путь к Файл не существует, даже если он существует.

Я думаю, что, удалив файл на исполняемый файл, он каким-то образом меняет путь загрузки изображений. Как я могу решить эту проблему?

Ответы [ 2 ]

1 голос
/ 31 мая 2010

Ваша программа будет запущена с другим Environment.CurrentDirectory.Всегда проверяйте, загружаете ли вы файлы с абсолютным путем (т. Е. не используйте Image.FromFile ("blah.jpg")).

Чтобы получить абсолютный путь к файлу, которыйхранится в том же каталоге, что и ваш EXE, вы можете использовать Application.StartupPath, например.Или Assembly.GetEntryAssembly (). Расположение, если вы не используете Windows Forms.

0 голосов
/ 31 мая 2010

Это зависит от того, как вы запускаете перетаскивание файла за пределы вашего приложения. Если щелкнуть файл и перетащить его из проводника Windows, в раскрывающемся списке будет указан полный абсолютный путь . В этом случае следующий код показывает имя файла и выполняет перетаскивание содержимого файла в текстовое поле:

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

Итак, дайте нам знать больше о вашем источнике перетаскивания. Скорее всего, вам придется изменить источник, чтобы перетащить абсолютный путь, или каким-либо образом определить полный путь из относительного пути в данных перетаскивания.

Кроме того, ваша программа никогда не должна аварийно завершать работу из-за неверных данных. Либо проверьте необходимые условия, либо используйте блок try / catch вокруг необходимого кода.

...