如何获得在Visual Studio中的文件的相对path?

我试图得到我在Visual Studio中的解决scheme资源pipe理器中添加的图像文件的path,但我无法获得该图像的相对path。 H是我的项目的文件结构:

 / BulutDepoProject
     / FolderIcon
         Folder.ico
         Main.cs

我可以像这样得到这个图像:

"C:\\Users\\Tolga\\Desktop\\BulutDepo\\BulutDepoProject\\FolderIcon\\Folder.ico" 

但我应该能够得到它像这样的东西:

 "~\\FolderIcon\\Folder.ico" 

我想我不知道它的确切语法,所以我不能获取图像。 🙁

当你想要使用任何types的外部文件的时候,肯定有办法把它们放在你的项目中的一个文件夹中,但是不如从资源中获取它们。 在常规的Visual Studio项目中,您应该在Properties部分下有Resources.resx文件,如果没有,您可以轻松地添加自己的Resource.resx文件。 并在其中添加任何types的文件,您可以在此处访问为您的项目添加资源文件的演练。

在你的项目中有资源文件后,调用它们很简单,如下所示:

 var myIcon = Resources.MyIconFile; 

当然,你应该像这样添加using Properties语句:

 using <namespace>.Properties; 

我有点晚了,我不确定这是不是你要找的,但我想我会添加它,以防其他人发现它有用。

假设这是你的文件结构:

 /BulutDepoProject /bin Main.exe /FolderIcon Folder.ico Main.cs 

您需要编写相对于Main.exe文件的path。 所以,你想访问Folder.ico ,在你的Main.cs你可以使用:

 String path = "..\\FolderIcon\\Folder.ico" 

这似乎对我有用!

省略“〜\”:

 var path = @"FolderIcon\Folder.ico"; 

~\对于文件系统来说并不意味着什么。 我见过的唯一正确使用的地方是在一个web应用程序中,ASP.NET用应用程序根目录的绝对path代替了代字号。

您通常可以假定path相对于EXE所在的文件夹。 此外,请确保在Visual Studio的属性选项卡中将图像指定为“内容”和“如果更新则复制”/“始终复制”。

我也遇到了同样的问题,我能够解决这个问题。 所以让我解释一下我应用的步骤。 我会根据你的情况来解释。

根据我的方法,我们需要使用'Path'类和'Assembly'类来获得相对path。

所以首先使用语句导入System.IO和System.Reflection。

然后input下面给出的代码行。

  var outPutDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly(). CodeBase); 

实际上,在给定的行上面存储了项目输出目录的path(这里'输出'目录是指项目的Debug文件夹。

现在将您的FolderIcon目录复制到Debug文件夹中。 然后input下面给出的行。

 var iconPath = Path.Combine(outPutDirectory, "FolderIcon\\Folder.ico"); 

现在这个'iconPath'variables包含了你的Folder.ico的整个path。 现在你所要做的就是存储一个stringvariables。 使用下面给出的线。

 string icon_path = new Uri(iconPath ).LocalPath; 

现在,您可以使用此icon_pathstringvariables作为图标的相对path。

谢谢。

我认为使用这将是最简单的

 new Uri("pack://application:,,/FolderIcon/" + youImageICO); 

或者这个代码将在任何机器上工作,如果你的文件夹在你的根项目,如果你想改变它…只是改变这个部分@“.. \”

 public static string bingPathToAppDir(string localPath) { string currentDir = Environment.CurrentDirectory; DirectoryInfo directory = new DirectoryInfo( Path.GetFullPath(Path.Combine(currentDir, @"..\..\" + localPath))); return directory.ToString(); }