Miloss
Miloss

Reputation: 29

How can I find a file within any description of path?

I need find the specific file/folder on my hard drive. For example i need find a file (do1.bat) and then store the path of the file. But i dont know where can it be stored, so i have to scan all hard drive. How can i use C# for this?

Upvotes: 0

Views: 88

Answers (4)

SᴇM
SᴇM

Reputation: 7213

For one file:

public string FindFileByName(string fileName, string searchPath)
{
    string resultPath = null;
    DirectoryInfo directoryInWhichToSearch = new DirectoryInfo(searchPath);

    FileInfo foundFile = directoryInWhichToSearch.GetFiles(fileName, SearchOption.AllDirectories)[0];

    resultPath = foundFile.FullName;

    return resultPath;
}

You can then use it like this:

string fileFullPath = FindFileByName("do1.bat", @"C:\");

Upvotes: 0

René Vogt
René Vogt

Reputation: 43886

A simple way would be

var results = Directory.GetFiles("c:\\", "do1.bat", SearchOption.AllDirectories);

This would recurse through all directory and collect all files named do1.bat. Unfortunatly this will not work on complete c:\ since it will throw exceptions if you don't have access to a directory, which surely will happen.

So this is a recursive version:

private static void FindFile(DirectoryInfo currentDirectory, string pattern, List<FileInfo> results)
{
    try 
    {
        results.AddRange(currentDirectory.GetFiles(pattern, SearchOption.TopDirectoryOnly));
        foreach (DirectoryInfo dir in currentDirectory.GetDirectories("*", SearchOption.TopDirectoryOnly).Where(d => d.Name != "." && d.Name != ".."))
            FindFile(dir, pattern, results);
    }
    catch
    { 
        // probably no access to directory
    }
}

This recurses through the directory tree and tries to get the files in a directory and then all subdirectories (except . and ..).
You can use it this way:

DirectoryInfo d = new DirectoryInfo("c:\\");
List<FileInfo> results = new List<FileInfo>();
FindFile(d, "do1.bat", results);

This will find all files named do1.bat in any subdirectory of C:\\ and enlist the FileInfos in the results list.

Upvotes: 1

fubo
fubo

Reputation: 45947

this should provide you a list of files, matching your search pattern

string[] Result = Directory.GetFiles(@"C:\", "do1.bat", SearchOption.AllDirectories);

Upvotes: 1

timblistic
timblistic

Reputation: 581

Refer: https://msdn.microsoft.com/en-us/library/07wt70x2(v=vs.110).aspx

    List<string> lstfilepaths = new List<string>();
    public static void ProcessDirectory(string targetDirectory) 
    {
      // Process the list of files found in the directory.

       string [] fileEntries = Directory.GetFiles(targetDirectory);

       foreach(string fileName in fileEntries) // included as per your logic
       {
            if(fileName == "do1.bat")
              {
                 ProcessFile(fileName);
              }
       }

    // Recurse into subdirectories of this directory.
        string [] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
        foreach(string subdirectory in subdirectoryEntries)
             ProcessDirectory(subdirectory);
     }

     public static void ProcessFile(string path) 
       {
        lstfilepaths.Add(path);    
       }

Upvotes: 0

Related Questions