我有一个用C#编写的程序,该程序将图像加载给图像。但是,当您在可执行文件上拖放另一个文件时,就像您向程序提供文件的命令行参数一样,并且该文件与可执行文件不在同一文件夹中,程序崩溃了,因为它说明了通往该文件的路径文件不存在,即使确实如此。

我认为,通过将文件放在可执行文件上,它正在更改其以某种方式加载图像的路径。如何解决此问题?

有帮助吗?

解决方案

您的程序将从不同的环境开始。CurrentDirectory。始终确保使用绝对路径名加载文件(即 使用image.fromfile(“ blah.jpg”))。

要获取与EXE相同目录中存储的文件的绝对路径,您可以使用application.startuppath。或assembly.getEntryAssembly()。如果您不使用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();
        }
    }
}

因此,让我们更多地了解您的阻力源。最有可能您必须修改源以拖动绝对路径,或者以某种方式从阻力数据中的相对路径确定完整路径。

另外,由于数据不良,您的程序绝不应崩溃。检查所需条件,或在必要的代码周围使用试用/捕获块。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top