Удалите последний символ, если это DirectorySeparatorChar с C # - PullRequest
20 голосов
/ 16 мая 2011

Мне нужно извлечь информацию о пути, используя Path.GetFileName(), и эта функция не работает, когда последний символ входной строки - DirectorySeparatorChar ('/' или '\').

Я придумал этот код, но он слишком длинный. Есть ли лучший способ пойти?

string lastCharString = fullPath.Substring (fullPath.Length-1);
char lastChar = lastCharString[0];

if (lastChar == Path.DirectorySeparatorChar) {
    fullPath = fullPath.Substring(0, fullPath.Length-1);
}

Ответы [ 5 ]

51 голосов
/ 16 мая 2011
fullPath = fullPath.TrimEnd(Path.DirectorySeparatorChar);
11 голосов
/ 20 января 2012
// If the fullPath is not a root directory
if (Path.GetDirectoryName(fullPath) != null)
    fullPath = fullPath.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);
3 голосов
/ 16 мая 2011
while(fullPath.EndsWith(Path.DirectorySeparatorChar.ToString())){
   fullPath = fullPath.Substring(0, fullPath.Length-1);
}
2 голосов
/ 16 мая 2011
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

Надеюсь, это поможет.

0 голосов
/ 16 мая 2011
fullPath = Path.GetFileName(
    fullPath.Split(
        new [] { Path.DirectorySeparatorChar }, 
        StringSplitOptions.RemoveEmptyEntries
    ).Last()
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...