如何获取相对于特定目录的文件名?

5

我有一个方法用于文件复制。用户在命令行上指定“根目录”,我使用 Path.GetFullPath(input) 对其进行清理。

我需要获取相对于该根目录的文件路径,因此以下情况将返回:

Root        FilePath                    Return
y:\         y:\temp\filename1.txt       temp\filename1.txt
y:\dir1     y:\dir1\dir2\filename2.txt  dir2\filename2.txt
4个回答

5

这将其转换为“../”,甚至似乎与之无关? - esac
根路径 = y:\,文件路径 = y:\2010-05\DSC_154.JGP - esac
@esac: 抱歉,我把参数弄错了。交换一下 Uris,应该就可以了。 - SLaks
可能需要将rootPath替换为此处的内容:https://dev59.com/zmIj5IYBdhLWcg3wTTcG,因为这个不会通过测试2,因为rootPath缺少尾部反斜杠。 - user420667

2
string s1 = "y:\\";
string s2 = "y:\\temp\filename1.txt";
Console.WriteLine(s2.Substring(s1.Length)); \\ Outputs temp\filename1.txt

希望这可以帮助到您。为确保删除尾随的\字符或类似字符,建议调用.Trim()函数。

我是指 http://msdn.microsoft.com/en-us/library/d4tt83f9.aspx 这个具有原型和所有方法的实际方法。但如果你只想对一侧进行操作,那么对于此操作,可以使用 TrimStart... 文件名不能包含 \,但它可能位于子文件夹路径的开头。 - James

1
System.IO.Path.GetFullPath( filePath ).Substring( rootPath.Length )

我认为System.IO.Path.GetFullPath(filePath).Substring(System.IO.Path.GetFullPath(rootPath).Length)更安全 - 在假设rootPath的长度在两个字符串中相同之前,将两个字符串都转换为系统路径。 - Hutch

1
string relativePath = Path.GetFullPath(input).Replace(rootPath, "");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接