【问题标题】:How to get relative path of a file in visual studio?如何在 Visual Studio 中获取文件的相对路径?
【发布时间】:2012-11-12 10:33:32
【问题描述】:

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

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

我可以得到这样的图像:

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

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

"~\\FolderIcon\\Folder.ico"

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

【问题讨论】:

标签: c# visual-studio


【解决方案1】:

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

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

var myIcon = Resources.MyIconFile;

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

using <namespace>.Properties;

【讨论】:

  • @christo8989 OP 是关于一个 image 文件的,无论如何它将是 readonly,所以 ....
【解决方案2】:

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

假设这是你的文件结构:

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

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

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

这似乎对我有用!

【讨论】:

  • 在我的情况下这是一个更好的解决方案,因为被引用的文件由解决方案中的另一个项目管理。语法不也支持单个点吗? string path = ".\\FileName.txt"
  • 这是一个糟糕的解决方案,不要使用它...这仅适用于“调试”方案,您当前的工作目录是&lt;Project&gt;/Debug,因此它适用于 VS 调试环境。但是,如果您退出 IDE……或者从不同的工作目录运行 EXE,它肯定会崩溃。
【解决方案3】:

省略“~\”:

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

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

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

【讨论】:

  • 在 unix/linux 中,'~' 是“主目录”的同义词。
  • @Nyerguds 是的。但是,斜线是错误的方式,这个问题被标记为“Visual Studio”,它与 Linux 并不真正兼容,尤其是在 2012 年发布这个问题时。
  • "您通常可以假设路径是相对于 EXE 所在的文件夹"
  • @TomerW 除了双击它之外,还有很多方法可以运行可执行文件。
  • 正确,但是...应用程序应该适用于各种方式,包括我认为最常见的 Dblclick。
【解决方案4】:

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

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

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

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

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

实际上上面给定的行存储了您项目的输出目录的路径。(这里的“输出”目录是指您的项目的Debug文件夹)。

现在将您的 FolderIcon 目录复制到 Debug 文件夹中。然后键入以下给定的行。

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

现在这个 'iconPath' 变量包含了您的 Folder.ico 的整个路径。您所要做的就是将它存储在一个字符串变量中。使用下面的代码行。

string icon_path = new Uri(iconPath ).LocalPath;

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

谢谢。

【讨论】:

  • 为什么file:在路径前面
  • @KolobCanyon 这是因为 .NET 程序集可以从各种 URI 运行,而不仅仅是从磁盘(COM 对象、RPC 等...)如果您确定可以使用 Assembly.GetExecutingAssembly().Location你在处理一个文件(EXE/DLL)
【解决方案5】:

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

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

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

希望有所帮助。

【讨论】:

    【解决方案6】:

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

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

    【讨论】:

      【解决方案7】:

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

      string sCurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;
      
      string sFile = System.IO.Path.Combine(sCurrentDirectory, @"libs\cat");
      
      string sFilePath = Path.GetFullPath(sFile);
      

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      • 2010-09-14
      • 2013-07-17
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      相关资源
      最近更新 更多