如何使用相对路径而不是绝对路径

时间:2014-01-09 22:35:48

标签: c# winforms visual-studio relative-path absolute-path

我有一些图像存储在文件夹中:

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

2 个答案:

答案 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);
    }