2016-05-18 3 views
0

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

имя каталога является недопустимым

являются следующие пример пути:

strFilePathName = C: \ Inetpub \ Wwwroot \ PSSWeb \ имя_папки \ xxx.ini

следующий код, который я использую для получения Directoryname на основе префикса PSS, и его следует вернуть PSSWeb. Я не могу найти решение для этого.

var directories = Directory.GetDirectories(strFilePathName, 
              "PSS?", 
              SearchOption.AllDirectories); 
+0

Какая ошибка? – Nasreddine

+0

@Nasreddine «Недопустимое имя каталога» – theinarasu

+0

strFilePathName не является именем каталога, это имя файла –

ответ

3

имя пути вы указали "C: \ Inetpub \ Wwwroot \ PSSWeb \ имя_папки \ xxx.ini" не каталог, а файл.

// 
    // Summary: 
    //  Returns the names of the subdirectories (including their paths) that match the 
    //  specified search pattern in the specified directory, and optionally searches 
    //  subdirectories. 
    // 
    // Parameters: 
    // path: 
    //  The relative or absolute path to the directory to search. This string is not 
    //  case-sensitive. 
    // 
    // searchPattern: 
    //  The search string to match against the names of subdirectories in path. This 
    //  parameter can contain a combination of valid literal and wildcard characters 
    //  (see Remarks), but doesn't support regular expressions. 
    // 
    // searchOption: 
    //  One of the enumeration values that specifies whether the search operation should 
    //  include all subdirectories or only the current directory. 
    // 
    // Returns: 
    //  An array of the full names (including paths) of the subdirectories that match 
    //  the specified criteria, or an empty array if no directories are found. 
    // 
    // Exceptions: 
    // T:System.ArgumentException: 
    //  path is a zero-length string, contains only white space, or contains one or more 
    //  invalid characters. You can query for invalid characters by using the System.IO.Path.GetInvalidPathChars 
    //  method.-or- searchPattern does not contain a valid pattern. 
    // 
    // T:System.ArgumentNullException: 
    //  path or searchPattern is null. 
    // 
    // T:System.ArgumentOutOfRangeException: 
    //  searchOption is not a valid System.IO.SearchOption value. 
    // 
    // T:System.UnauthorizedAccessException: 
    //  The caller does not have the required permission. 
    // 
    // T:System.IO.PathTooLongException: 
    //  The specified path, file name, or both exceed the system-defined maximum length. 
    //  For example, on Windows-based platforms, paths must be less than 248 characters 
    //  and file names must be less than 260 characters. 
    // 
    // T:System.IO.IOException: 
    //  path is a file name. 
    // 
    // T:System.IO.DirectoryNotFoundException: 
    //  The specified path is invalid (for example, it is on an unmapped drive). 
    public static string[] GetDirectories(string path, string searchPattern, SearchOption searchOption); 

thats документация метода. Упоминается, что первым параметром должен быть каталог.

+0

Отлично, ошибка исчезла, но ее не удается найти префикс в имени каталога, как в searchpattern, вы знаете, в чем проблема? – theinarasu

+0

использовать PSS * вместо PSS? а также найти файлы в подкаталогах и в родительский каталог. –

0

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

string strFilePathName = "C:\inetpub\wwwroot\PSSWeb\foldername\xxx.in"; 
string x = Path.GetDirectoryName(strFilePathName); 
DirectoryInfo dir = new DirectoryInfo(@x); 
DirectoryInfo OneLevelsUp = dir.Parent; 

Результат я получил PSSWeb имя папки из пути C:\inetpub\wwwroot\PSSWeb\foldername\xxx.ini.

Чтобы получить два уровня имя папки

если кто-то хочет получить два уровня вверх, вы можете попробовать следующую строку, просто изменить к

DirectoryInfo OneLevelsUp = dir.Parent 
DirectoryInfo TwoLevelsUp = dir.Parent.Parent 

вернет wwwroot имя папки в соответствии с путь, упомянутый выше