程序无法从拖放文件打开的相对路径上加载图像
-
05-10-2019 - |
题
我有一个用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();
}
}
}
因此,让我们更多地了解您的阻力源。最有可能您必须修改源以拖动绝对路径,或者以某种方式从阻力数据中的相对路径确定完整路径。
另外,由于数据不良,您的程序绝不应崩溃。检查所需条件,或在必要的代码周围使用试用/捕获块。
不隶属于 StackOverflow