我有一些图像存储在文件夹中:
C:\MyPrograms\VisualStudio\BirdPrograms\BirdTouchScreenBasic\BirdTouchScreenBasic\pigeonImages
我打算在我创建该程序的另一台计算机上使用该程序。
我在List<Image>
有没有办法从相对路径而不是绝对路径加载图像?
即。而不是
Image.FromFile("C:/MyPrograms/VisualStudio/BirdPrograms/BirdTouchScreenBasic/BirdTouchScreenBasic/pigeonImages/pigeon5.png");
我可以写:
Image.FromFile("./pigeonImages/pigeon5.png");
假设Visual Basic用于运行程序的文件位于顶部文件夹中,并且pigeonImages文件夹中有一个文件夹,我错了。
所以在命令行上我应该能够输入:
C:\BirdTouchScreenBasic> cd pigeonImages
答案 0 :(得分:1)
根据您提供的路径,如果当前工作目录为BirdTouchScreenBasic
,那么@".\pigeonImages\pigeon5.png"
将是正确的路径。如果您希望无论程序运行在何处都可以访问这些图像,您应该将它们添加到解决方案中,然后将它们复制到输出目录中。如果是这种情况,那么您可以在整个代码中使用相对路径而不会出现问题。如果您创建路径@".\pigeonImages\fileName.ext"
但实际上没有构建项目,那么文件夹及其中的文件存在于CWD中,那么您将遇到问题。
如果您不知道如何添加图像,那么C#项目中的资源是基本步骤;右键单击proj文件并选择add then new folder,创建pigeonImages
文件夹。右键单击该文件夹,然后选择添加新项目。导航到要添加的图像文件并选择它,按确定。右键单击刚刚添加的图像,选择属性。有一个名为“Copty to Output Directory”的选项设置为Copy for newer或Copy Always。
答案 1 :(得分:1)
从不这样做,你的Environment.CurrentDirectory将被设置为完全无法预测。它不在您的控制之下,无论程序启动程序如何控制它。这经常出错。
相反,您应该创建一个基于EXE位置的绝对路径。假设您将图像文件部署在与EXE相同的目录中或子目录中。使用这样的代码,为清楚起见,拼写出来:
using System.Reflection;
using System.IO;
...
public static Image LoadPigeon(string name) {
var exeDir = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
var imgDir = Path.Combine(exeDir, "pigeonImages");
var imgPath = Path.Combine(imgDir, name);
return Image.FromFile(imgPath);
}