0

So basically I have a program that searches for all files and directories IN a specified directory. How can I improve this program so when I specify a directory, it goes deeper and deeper into the so said specified directory until it reaches the end and there are no more directories, only files.

using System;
using System.Windows.Forms;
using System.Drawing;
using System.IO;

class DemoFiles : ConsoleForm
{
    OpenFileDialog ofd = new OpenFileDialog();
    FolderBrowserDialog fbd = new FolderBrowserDialog();

    public DemoFiles() :
        base("Eksperimentai su failais", Color.Blue, 800, 600)
    {
        CreateButtons();
    }
    private void CreateButtons()
    {
        AddButton("File", (o, e) => {
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                var sr = new StreamReader(ofd.FileName);
                WriteLine(ofd.FileName);
                WriteLine(sr.ReadToEnd());
            }
        });
        AddButton("Folder", (o, e) => {
            if (fbd.ShowDialog() == DialogResult.OK)
            {
                WriteLine(">>>>" + fbd.SelectedPath);
                string[] dirs = Directory.GetDirectories(fbd.SelectedPath);
                WriteLine("*** Directories");
                Array.ForEach(dirs, WriteLine);
                WriteLine("--- Files");
                string[] files = Directory.GetFiles(fbd.SelectedPath);
                Array.ForEach(files, WriteLine);
                Directory.SetCurrentDirectory(fbd.SelectedPath);

                //foreach (string directory in dirs)
                //{
                //    foreach (string file in files)
                //    {
                //        if (directory.Contains(file))
                //        {
                //            Array.ForEach(files, WriteLine);
                //            Directory.SetCurrentDirectory(fbd.SelectedPath);
                //        }
                //    }
                //}
            }
        });
    }

}
Vadim Kotov
  • 8,084
  • 8
  • 48
  • 62

2 Answers2

0

You could do this yourself with recursion, or you can use the searchoption parameter of the GetFiles function:

https://learn.microsoft.com/en-us/dotnet/api/system.io.searchoption?view=netframework-4.8

TABLE 1 AllDirectories 1
Includes the current directory and all its subdirectories in a search operation. This option includes reparse points such as mounted drives and symbolic links in the search.

Something like this - (i have not tested it).

DirectoryInfo[] directories = 
            di.GetDirectories("*", SearchOption.AllDirectories);

Also see this answer: https://stackoverflow.com/a/31882866/4122889

sommmen
  • 6,570
  • 2
  • 30
  • 51
0

Use this to get all files:

string[] filePaths = Directory.GetFiles(@"your root directory path", "*.*", SearchOption.AllDirectories);
foreach (var file in filePaths)
{
    // your logic.
}

Change "*.*" to "*.txt" if you want only text files.

Jake
  • 1,560
  • 2
  • 17
  • 25