Я хочу пропустить все подпапки и файлы в папке и проверить, содержит ли конкретное имя файла папку «X» в своем пути (предка). Я не хочу использовать сравнение строк. Есть ли лучший способ?Проверьте, существует ли папка в пути к файлу
0
A
ответ
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
Вы можете использовать Directory.GetFiles()
// Only get files that begin with the letter "c."
string[] dirs = Directory.GetFiles(@"c:\", "c*");
Console.WriteLine("The number of files starting with c is {0}.", dirs.Length);
foreach (string dir in dirs)
{
Console.WriteLine(dir);
}
https://msdn.microsoft.com/en-us/library/6ff71z1w(v=vs.110).aspx
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: /, который бы занять некоторое время, конечно
Это путано: «проверьте, содержит ли конкретное имя файла папку« X »на своем пути (предка)». –
http://stackoverflow.com/questions/9092160/check-if-a-folder-exist-in-a-directory-and-create-them-using-c-sharp –
Я смущен: вы [A ] Хотите проверить, содержит ли указанный путь к файлу указанное имя папки, или [B] хотите рекурсивно искать в папке для одного или нескольких файлов с указанным именем под папкой с указанным именем? –