.NET程序中的硬编码路径

时间:2010-04-09 05:29:35

标签: c# path

我正在用C#开发一个应用程序。我有一个名为myfolder的文件夹,它包含一个名为mypoints.bmp的文件。文件夹myfolder位于我的项目文件夹中,它位于D盘中。路径为D:\ Myproject \ myfolder \ mypoints.bmp。

现在,在我的程序中,无论我需要mypoints.bmp,我都对整个路径进行了硬编码。当我的项目被复制到C驱动器下的另一个系统时,由于硬编码路径,我无法运行我的项目。我如何给出路径,以便即使将其加载到不同驱动器下的其他系统中也不会有任何问题。

7 个答案:

答案 0 :(得分:7)

最好将路径存储在配置文件中。

Add -> New Item -> Application Configuration File

然后您可以使用以下类来提取您正在寻找的值:

System.Configuration.ConfigurationManager

使用look here

答案 1 :(得分:3)

如果您所指的图像是不变的,并且只是作为您的应用程序的资源,那么您可以考虑将它们嵌入resource files中,这些是作为程序集的一部分编译的。这样你就不用担心路径或复制它们了。

答案 2 :(得分:2)

如果在代码中使用BMP文件并在运行时访问,那么将它保留在项目目录中是没有意义的。它也应该出现在outputdirectory中。

即你可以编写一个post-build命令将你的文件夹复制到输出目录。

copy "$(ProjectDir)\MyFolder\*.*" "$(OutDir)" 然后在代码中你可以写出相对路径,即“MyFolder \ MyPoints.bmp”

但请记住一件事。如果这个BMP文件不会在程序执行期间发生变化,那么最好将它作为资源。

答案 3 :(得分:2)

您可以使用类似GetCurrentPath()的内容,它将返回.exe文件路径,然后将\ myfolder \ mypoints.bmp添加到此路径。这不依赖于C或D或......驱动器和文件夹

答案 4 :(得分:1)

无论您的程序如何部署到目标计算机,都可以始终可靠地找到一个路径:存储.exe的目录。

利用此功能,将.bmp文件放在同一目录中。或者是安装目录的子目录。你没有说你写了什么样的程序,在Windows Forms中使用Application.ExecutablePath很容易。但是无处不在的通用解决方案:

public static string GetImagePath(string filename) {
  string exeFile = System.Reflection.Assembly.GetEntryAssembly().Location;
  string exePath = System.IO.Path.GetDirectoryName(exeFile);
  string imgPath = System.IO.Path.Combine(exePath, @"images");
  string imgFile = System.IO.Path.Combine(imgPath, filename);
  return imgFile;
}

假设图像存储在名为“images”的子目录中。必要时调整。

最后但并非最不重要:不要忘记您可以将图像添加到程序的资源中,以便在.exe文件中进行烘焙。 Project + Properties,Resources选项卡。强烈推荐。

答案 5 :(得分:0)

您还可以使用预定义或现有的系统变量。无论如何,您必须决定用户(或您)何时必须定义该路径(在配置文件中或在任何地方) - 在安装期间,首次运行,首次运行之前或应用程序运行的任何时间。

答案 6 :(得分:0)

我个人会在C#中使用Environment类。然后,我将使用Environment.SpecialFolder枚举找到本地应用程序设置文件夹。

然后,我将所有应用程序特定文件存储在本地应用程序设置文件夹中的文件夹中。

这样您也是UAC安全的,因为如果您不是管理员,如果您想将文件存储在Program Files中,UAC会抱怨。