C# .NET程序中的硬编码路径

C# .NET程序中的硬编码路径,c#,path,C#,Path,我正在用C#开发一个应用程序。我有一个名为myfolder的文件夹,其中包含一个名为mypoints.bmp的文件。文件夹myfolder位于我的项目文件夹中,它位于D驱动器中。路径为D:\Myproject\myfolder\mypoints.bmp 现在,在我的程序中,无论我在哪里需要mypoints.bmp,我都已硬编码了整个路径。当我的项目被复制到C驱动器下的其他系统时,由于硬编码路径,我无法运行我的项目。如何给出路径,以便即使将其加载到不同驱动器下的不同系统中也不会出现任何问题。最好将

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


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

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

Add->New Item->Application Configuration File

然后,您可以使用以下类提取要查找的值:

System.Configuration.ConfigurationManager

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

i、 e您可以编写生成后命令将文件夹复制到输出目录

copy“$(ProjectDir)\MyFolder\*.*”$(OutDir)
然后在代码中只需编写相对路径,即“MyFolder\MyPoints.bmp”


但请记住一件事。如果此BMP文件在程序执行过程中不会更改,最好将其作为资源使用。

您可以使用GetCurrentPath()之类的工具,它将返回.exe文件路径,然后将\myfolder\mypoints.BMP添加到此路径。这将不取决于C或D或。。。驱动器和文件夹也可以使用预定义的或现有的系统变量。无论如何,您必须决定用户(或您)何时必须定义该路径(在配置文件中或任何地方)-在安装期间、首次运行、首次运行之前或在应用程序运行的任何时间

> P>如果你所指的图像是不改变的,只是作为你的应用程序的资源,那么你可以考虑将它们嵌入到程序集的一部分中。这样,您就不必担心路径或复制路径。

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

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

通过这种方式,您也是UAC安全的,因为如果您不是管理员,UAC会抱怨您是否想将文件存储在程序文件中。

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

利用这一点,将.bmp文件放在同一目录中。或安装目录的子目录。您没有说您编写了什么样的程序,在Windows窗体中使用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文件中。项目+属性,资源选项卡。强烈推荐。

复制文件不需要生成后事件。在vs解决方案资源管理器中的文件上单击鼠标右键,然后选择“属性”。将其设置为
Content
Copy if newer
。哦,是的……不错的选择。但是你没有文件夹的选项。仅适用于文件。如果您在项目中创建了一个具有所需名称的文件夹,并在此文件夹中设置了文件的内容标志,VS也会在您的输出文件夹中创建此结构。我承认我不知道这一点。很高兴今天我学到了一个新东西。设置文件在这里更合适。应用程序配置文件通常存储在只读位置,每个用户都可以在其中配置设置文件。