2016-03-21 4 views
0

Я хочу пропустить все подпапки и файлы в папке и проверить, содержит ли конкретное имя файла папку «X» в своем пути (предка). Я не хочу использовать сравнение строк. Есть ли лучший способ?Проверьте, существует ли папка в пути к файлу

+0

Это путано: «проверьте, содержит ли конкретное имя файла папку« X »на своем пути (предка)». –

+0

http://stackoverflow.com/questions/9092160/check-if-a-folder-exist-in-a-directory-and-create-them-using-c-sharp –

+0

Я смущен: вы [A ] Хотите проверить, содержит ли указанный путь к файлу указанное имя папки, или [B] хотите рекурсивно искать в папке для одного или нескольких файлов с указанным именем под папкой с указанным именем? –

ответ

0

Отвечая на ваш конкретный вопрос (тот, который в названии вашего вопроса, а не в тело), ​​как только у вас есть имя файла (который другие ответы сказать вам, как найти), вы можете сделать:

bool PathHasFolder(string pathToFileName, string folderToCheck) 
{ 
    return Path.GetDirectoryName(pathToFileName) 
      .Split(Path.DirectorySeparatorChar) 
      .Any(x => x == folderToCheck); 
} 

Это будет работать только с абсолютными путями ... если у вас есть относительные пути, вы можете усложнить (для этого требуется, чтобы файл фактически существовал):

bool PathHasFolder(string pathToFileName, string folderToCheck) 
{ 
    return new FileInfo(pathToFileName) 
      .Directory 
      .FullName 
      .Split(Path.DirectorySeparatorChar) 
      .Any(x => x == folderToCheck); 
} 
0

Вы можете использовать рекурсивный поиск как

// sourcedir = path where you start searching 
public void DirSearch(string sourcedir) 
{ 
    try 
    { 
     foreach (string dir in Directory.GetDirectories(sourcedir)) 
     { 
      DirSearch(dir); 
     } 
     // If you're looking for folders and not files take Directory.GetDirectories(string, string) 
     foreach (string filepath in Directory.GetFiles(sourcedir, "whatever-file*wildcard-allowed*")) 
     { 
      // list or sth to hold all pathes where a file/folder was found 
      _internalPath.Add(filepath); 
     } 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine(e.Message); 
    } 
} 

Так что в вашем случае, если вы ищете папку XYZ, использование

// Takes all folders in sourcedir e.g. C:/ that starts with XYZ 
foreach (string filepath in Directory.GetDirectories(sourcedir, "XYZ*")){...} 

Так что, если вы дадите SourceDir C:/ он искал бы во всех папках, доступных на C: /, который бы занять некоторое время, конечно