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

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

Вопрос

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

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

Это было полезно?

Решение

Ваша программа будет начата с другой среды. CurrentDirectory. Всегда убедитесь, что вы загружаете файлы с именем абсолютного пути (т.е. нет Используйте image.fromfile ("blah.jpg")).

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

Другие советы

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

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 вокруг нужного кода.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top