0

我有一个用 C# 编写的程序,它使用 Image.FromFile 加载图像,并且每次都成功加载图像。但是,当您将另一个文件拖放到可执行文件上时,就像您向程序提供文件的命令行参数,并且该文件与可执行文件不在同一个文件夹中,程序会崩溃,因为它说的是文件不存在,即使它存在。

我认为通过在可执行文件上放置一个文件,它会以某种方式改变它加载图像的路径。我该如何解决这个问题?

4

2 回答 2

1

您的程序将以不同的 Environment.CurrentDirectory 启动。始终确保使用绝对路径名加载文件(即不要使用 Image.FromFile("blah.jpg"))。

要获取与您的 EXE 存储在同一目录中的文件的绝对路径,您可以使用 Application.StartupPath 例如。或者 Assembly.GetEntryAssembly().Location 如果您不使用 Windows 窗体。

于 2010-05-31T18:13:54.523 回答
0

这取决于您如何在应用程序之外启动文件拖动。如果从 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 块。

于 2010-05-31T18:26:34.040 回答