繁体   English   中英

如何在 visual studio 中获取文件的相对路径?

[英]How to get relative path of a file in visual studio?

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

/BulutDepoProject
    /FolderIcon
        Folder.ico
        Main.cs

我可以得到这样的图像:

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

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

"~\\FolderIcon\\Folder.ico"

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

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

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

var myIcon = Resources.MyIconFile;

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

using <namespace>.Properties;

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

假设这是您的文件结构:

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

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

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

这似乎对我有用!

省略“~\\”:

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

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

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

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

根据我的方法,我们需要使用 '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 字符串变量作为图标的相对路径。

谢谢。

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

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

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

希望有所帮助。

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

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

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

string sCurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;

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

string sFilePath = Path.GetFullPath(sFile);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM