2012-11-12 87 views
42

我想获得一个图像文件的路径,我在Visual Studio的解决方案资源管理器中添加,但我无法获得该图像的相对路径。 H是我的项目的文件结构:如何在Visual Studio中获取文件的相对路径?

 
/BulutDepoProject 
    /FolderIcon 
     Folder.ico 
     Main.cs 

我能得到这样的形象:

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

但我应该能够像获得它:

"~\\FolderIcon\\Folder.ico" 

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

+0

您应该检查=> http://stackoverflow.com/questions/6895457/how-to-define-relative-paths-in-visual-studio-project – MarcD

+0

http://stackoverflow.com/a/ 799431/1577396以及http://msdn.microsoft.com/en-us/library/system.uri.makerelativeuri.aspx –

回答

35

当它是你想使用任何类型的外部文件的情况下,肯定是把它们放在一个文件夹在您的项目中的一种方式,而不是从资源让他们为有效。在常规的Visual Studio项目,你应该有下Properties部分中的Resources.resx文件,如果没有,你可以轻松地添加自己的Resource.resx文件。并添加任何类型的文件,你可以到达演练,添加资源文件到您的项目here

在你的项目资源文件,称他们之后是很容易,因为这:

var myIcon = Resources.MyIconFile; 

当然,你应该添加using Properties声明是这样的:

using <namespace>.Properties; 
+1

虽然资源是'只读':/ – christo8989

+0

@ christo8989这个OP是关于一个* image *文件,无论如何这个文件将是'readonly',所以...... –

13

省略“〜\”:

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

~\并不意味着在文件系统方面的东西我见过的正确使用是一个Web应用程序,其中唯一的地方。 ASP.NET用应用程序根目录的绝对路径代替代字号

您通常可以假设路径是相对于EXE所在的文件夹,并且确保图像被指定为“内容“和”复制如果更新“/”始终复制“在Visual Studio的属性选项卡中。

10

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

按照我的方法,我们需要使用“路径”类和“组装”类,以获得相对路径。

所以首先导入System.IO和的System.Reflection在using语句。

然后键入下面给出代码行。

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

其实上面给出线存储你的项目的输出目录的路径。(这里的“输出”目录指的是项​​目的调试文件夹)。

现在复制你的FolderIcon目录中Debug文件夹。然后输入下面给出的行。

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

现在这个'iconPath'变量包含了Folder.ico的整个路径。现在你所要做的就是存储一个字符串变量。使用下面给出的线。

string icon_path = new Uri(iconPath).LocalPath; 

现在,您可以使用此icon_path字符串变量作为图标的相对路径。

谢谢。

+0

*现在将您的FolderIcon目录复制到Debug文件夹。*我必须吗? – alex

1

我想用这将是最简单的

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(); 
} 
21

我有点晚了,我不知道,如果这是你正在寻找的,但我想我会添加它,以防其他人发现它有用。

假设这是你的文件结构:

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

你需要你的路径相对Main.exe写入文件。所以,你要访问Folder.ico,在你Main.cs你可以使用:

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

这似乎为我工作!

+0

这对我来说是一个更好的解决方案,因为被引用的文件由解决方案中的另一个项目管理。语法不支持单个点吗? 'string path =“。\\ FileName.txt”' –

相关问题