如果最后一个字符是带有 C# 的目录分隔符字符,请将其删除

本文关键字:字符 分隔符 删除 最后一个 如果 | 更新日期: 2023-09-27 17:56:28

我需要使用 Path.GetFileName() 提取路径信息,当输入字符串的最后一个字符是目录分隔符字符('/' 或 '''')时,此函数不起作用。

我想出了这个代码,但它太长了。有没有更好的方法?

string lastCharString = fullPath.Substring (fullPath.Length-1);
char lastChar = lastCharString[0];
if (lastChar == Path.DirectorySeparatorChar) {
    fullPath = fullPath.Substring(0, fullPath.Length-1);
}

如果最后一个字符是带有 C# 的目录分隔符字符,请将其删除

fullPath = fullPath.TrimEnd(Path.DirectorySeparatorChar);
// If the fullPath is not a root directory
if (Path.GetDirectoryName(fullPath) != null)
    fullPath = fullPath.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);
while(fullPath.EndsWith(Path.DirectorySeparatorChar.ToString())){
   fullPath = fullPath.Substring(0, fullPath.Length-1);
}
string path1 =  @"c:'directory'";
string path2 = @"c:'directory'file.txt";
string path3 = @"c:'directory";
Console.WriteLine(Path.Combine(Path.GetDirectoryName(path1), Path.GetFileName(path1)));
Console.WriteLine(Path.Combine(Path.GetDirectoryName(path2), Path.GetFileName(path2)));
Console.WriteLine(Path.Combine(Path.GetDirectoryName(path3), Path.GetFileName(path3)));

给:

c:'directory
c:'directory'file.txt
c:'directory

希望对您有所帮助。

fullPath = Path.GetFileName(
    fullPath.Split(
        new [] { Path.DirectorySeparatorChar }, 
        StringSplitOptions.RemoveEmptyEntries
    ).Last()
)

基于Marino Šimić的回答和Dima的评论,这是一个不会在C:C:'上失败的解决方案:

var newPath = Path.Combine(Path.GetDirectoryName(oldPath) ?? oldPath, Path.GetFileName(oldPath));