如何获得在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(); }