как найти путь к файлу по имени файла? - PullRequest
0 голосов
/ 05 мая 2010

У меня есть имя файла в соответствии с этим именем файла. Мне нужно найти путь к файлу. как найти путь к файлу по имени файла? мне нужно найти путь к файлу в соответствии с примером кода файла:

string path=      System.IO.Directory.GetDirectories(@"c:\", "kategori",System.IO.SearchOption.AllDirectories).First();

Но мне нужно:

string path=      System.IO.Directory.GetDirectories(@"anyFolder", "kategori",System.IO.SearchOption.AllDirectories).First();

мне нужно ниже


Main()
{
string path = PathFinder("Afilename")
}

output: C:\myFiles\AfileName

string PathFinder(string fileName)
{<br>
..................<br>
.................<br>
........<br>
.......<br>
....<br>
..<br>
.<br>
}

Ответы [ 3 ]

3 голосов
/ 05 мая 2010

Вероятно, такая функция могла бы работать для вас:

public static String SearchFileRecursive(String baseFolderPath, String fileName)
    {
        // Returns, if found, the full path of the file; otherwise returns null.
        var response = Path.Combine(baseFolderPath, fileName);
        if (File.Exists(response))
        {
            return response;
        }

        // Recursion.
        var directories = Directory.GetDirectories(baseFolderPath);
        for (var i = 0; i < directories.Length; i++)
        {
            response = SearchFileRecursive(directories[i], fileName);
            if (response != null) return response;
        }

        // { file was not found }

        return null;
    }
2 голосов
/ 05 мая 2010

Мне бы хотелось больше LINQish пути:

public static IEnumerable<FileInfo> FindFile(string fileName)
{
    if (String.IsNullOrEmpty(fileName))
        throw new ArgumentException("fileName");

    return Directory.GetLogicalDrives()
                    .SelectMany(drive => FindFile(fileName, drive));
}

public static IEnumerable<FileInfo> FindFile(string fileName, string folderName)
{
    if (String.IsNullOrEmpty(fileName))
        throw new ArgumentException("fileName");
    if (String.IsNullOrEmpty(fileName))
        throw new ArgumentException("folderName");

    var matchingFiles = Directory.EnumerateFiles(folderName)
                                 .Where(file => Path.GetFileName(file) == fileName)
                                 .Select(file => new FileInfo(file));

    var matchingFilesFromSubDirs = Directory.EnumerateDirectories(folderName)
                                            .SelectMany(directory => FindFile(fileName, directory));

    return matchingFiles.Concat(matchingFilesFromSubDirs);
}

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

foreach (var file in FindFile("myFile.ext"))
{
    Console.WriteLine("Name: " + file.FullName);
}
2 голосов
/ 05 мая 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...