c# - 获取相对于当前工作目录的路径?

标签 c# file-io

<分区>

我正在编写一个控制台实用程序来对命令行中指定的文件进行一些处理,但我遇到了一个无法通过 Google/Stack Overflow 解决的问题。如果指定了完整路径(包括驱动器盘符),我该如何重新格式化该路径以使其相对于当前工作目录?

一定有类似于 VirtualPathUtility.MakeRelative 函数的东西,但如果有的话,它让我望而却步。

最佳答案

如果您不介意切换斜线,您可以[滥用]使用Uri:

Uri file = new Uri(@"c:\foo\bar\blop\blap.txt");
// Must end in a slash to indicate folder
Uri folder = new Uri(@"c:\foo\bar\");
string relativePath = 
Uri.UnescapeDataString(
    folder.MakeRelativeUri(file)
        .ToString()
        .Replace('/', Path.DirectorySeparatorChar)
    );

作为函数/方法:

string GetRelativePath(string filespec, string folder)
{
    Uri pathUri = new Uri(filespec);
    // Folders must end in a slash
    if (!folder.EndsWith(Path.DirectorySeparatorChar.ToString()))
    {
        folder += Path.DirectorySeparatorChar;
    }
    Uri folderUri = new Uri(folder);
    return Uri.UnescapeDataString(folderUri.MakeRelativeUri(pathUri).ToString().Replace('/', Path.DirectorySeparatorChar));
}

关于c# - 获取相对于当前工作目录的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/703281/

相关文章:

c# - 在 C# 中分配此关键字

c# - ViewModel 中的可绑定(bind)字段

c# - 保持控制台启动以等待响应

java - 从 txt 文件读入单个数组 - Java

java - Java 中的动态文件路径(写入和读取文本文件)

c# - linq to 对象查询以排除 0

c# - MongoDB C# 驱动程序 : create document if not exists

python - 如何在Python中将一个csv文件中的状态代码映射到另一个csv文件中的状态名称?

c - 跳转到特定行的末尾

java - 打印和写入文件时数据不同