96

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

/BulutDepo项目
    /文件夹图标
        文件夹.ico
        主文件

我可以得到这样的图像:

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

但我应该能够通过以下方式获得它:

"~\\FolderIcon\\Folder.ico"

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

4

7 回答 7

60

当您想使用任何类型的外部文件时,当然有一种方法可以将它们放在项目中的文件夹中,但不如从资源中获取它们有效。在常规的 Visual Studio 项目中,您应该Resources.resx在该部分下有一个文件Properties,如果没有,您可以轻松添加自己的Resource.resx文件。并在其中添加任何类型的文件,您可以在此处访问将资源文件添加到项目的演练。

在项目中有资源文件后,调用它们很容易,如下所示:

var myIcon = Resources.MyIconFile;

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

using <namespace>.Properties;
于 2013-10-11T10:57:06.310 回答
44

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

假设这是您的文件结构:

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

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

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

这似乎对我有用!

于 2015-11-21T21:30:31.520 回答
31

省略“~\”:

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

~\就文件系统而言,这没有任何意义。我见过正确使用的唯一地方是在 Web 应用程序中,其中 ASP.NET 将波浪号替换为应用程序根目录的绝对路径。

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

于 2012-11-12T10:40:26.710 回答
18

我也遇到了同样的问题,我能够解决它。所以让我解释一下我应用的步骤。我将根据您的情况进行解释。

根据我的方法,我们需要使用“Path”类和“Assembly”类来获取相对路径。

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

然后输入下面给定的代码行。

        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 字符串变量作为图标的相对路径。

谢谢。

于 2013-08-19T14:42:32.557 回答
5

在 Visual Studio 中,请单击解决方案资源管理器窗格中的“Folder.ico”文件。然后您将看到属性窗格。将“复制到输出目录”行为更改为“如果更新则复制”。这将使 Visual Studio 将文件复制到输出 bin 目录。

现在要使用相对路径获取文件路径,只需键入:

string pathToIcoFile = AppDomain.CurrentDomain.BaseDirectory + "//FolderIcon//Folder.ico";

希望有帮助。

于 2020-04-28T08:43:01.110 回答
4

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

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();
}
于 2015-10-06T10:49:55.200 回答
0

我的文件夹位于项目的根目录,我使用了这个:

string sCurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;

string sFile = System.IO.Path.Combine(sCurrentDirectory, @"libs\cat");

string sFilePath = Path.GetFullPath(sFile);
于 2022-02-10T06:33:43.300 回答