FullName, FullPath для каталога - PullRequest
       5

FullName, FullPath для каталога

0 голосов
/ 20 сентября 2018

Почему DirectoryInfo не предоставляет единый способ получить полное имя для папки.

В этом примере:

class Program
{
    static void Main(string[] args)
    {
        System.IO.DirectoryInfo DirInfo = new System.IO.DirectoryInfo(@"C:\TEMP\");
        Console.WriteLine(DirInfo.FullName);
        System.IO.DirectoryInfo DirInfo2 = new System.IO.DirectoryInfo(@"C:\TEMP");
        Console.WriteLine(DirInfo2.FullName);
        Console.ReadLine();
    }
}

Независимо от того, существует ли каталог на самом деле, FullName простоотражает ввод пользователя в объект, но вы не можете быть уверены, что вы получите путь с «\» в конце.

В документации MSDN упоминается наследование от FileSystemInfo, где есть возможностьполучить FQN по свойству FullPath, но я не могу получить к нему доступ из экземпляра DirectoryInfo.

Может быть, есть хитрость или другой метод / поле, чтобы убедиться, что путь всегдаимеют одинаковый формат?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Я не уверен, правильно ли я понял ваш вопрос ... но для его унификации просто используйте, например.a Sanitize method.

Пример всегда удаления хвостовой обратной косой черты:

public string SanitizePath(string s) => s.TrimEnd('/', '\\');

Пример всегда добавления хвостовой обратной косой черты:

public string SanitizePath(string s) => s[s.Length - 1] == '/' || s[s.Length - 1] == '\\' ? s : String.Concat(s, '\\');

Однако, если проблема заключается вневерные пути из-за этой несогласованности, есть вероятность, что вы используете String.Concat для построения полного пути.

Вы всегда должны использовать Path.Combine для объединения информации о пути, поскольку это должно обеспечить правильный вывод.

0 голосов
/ 20 сентября 2018

Нет способа или способа получить обратную косую черту, если ее там нет.Это совершенно необязательно, но также не должно иметь значения для вашей программы, есть она или нет.Но если вы хотите это обеспечить:

char[] blackslashes = {Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar};
string dirPath = @"C:\TEMP";
if (!blackslashes.Contains(dirPath.Last()))
    dirPath += "\\";
System.IO.DirectoryInfo dirInfo = new System.IO.DirectoryInfo(dirPath);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...