Newuser
Newuser

Reputation: 399

How to read multiple files from server into c#

I want to know how to read multiple (about 500-1000) text files which are located on a server. So far, I've written code for a program that only reads a single text file.

Here's how I'm currently reading a single file.

  public void button1_Click(object sender, EventArgs e)
    {
        // Reading/Inputing column values



        OpenFileDialog ofd = new OpenFileDialog();
        if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {

            string[] fileLines = File.ReadAllLines(ofd.FileName);

I would like to get rid of the open file dialog box, and let the program automatically read the 500-1000 text files where are located in the sever.

I'm thinking something along the lines of

  for (int i =0; i<numFiles; i++)
  {
     //just use string[] fileLines =File.ReadAllLines()
     //how would i specify the path for multiple files?
  }

Questions are then:

  1. How would I approach this?
  2. How exactly should I get the number of files?
    (I'm guessing I'd have to read the server file which contains them.)

Upvotes: 5

Views: 7272

Answers (3)

P.Brian.Mackey
P.Brian.Mackey

Reputation: 44285

You can use recursion to loop through all directories. Using Directory.EnumerateFiles also allows you to use a foreach loop so you don't have to worry about the file count.

    private static void ReadAllFilesStartingFromDirectory(string topLevelDirectory)
    {
        const string searchPattern = "*.txt";
        var subDirectories = Directory.EnumerateDirectories(topLevelDirectory);
        var filesInDirectory = Directory.EnumerateFiles(topLevelDirectory, searchPattern);

        foreach (var subDirectory in subDirectories)
        {
            ReadAllFilesStartingFromDirectory(subDirectory);//recursion
        }

        IterateFiles(filesInDirectory, topLevelDirectory);
    }

    private static void IterateFiles(IEnumerable<string> files, string directory)
    {
        foreach (var file in files)
        {
            Console.WriteLine("{0}", Path.Combine(directory, file));//for verification
            try
            {
                string[] lines = File.ReadAllLines(file);
                foreach (var line in lines)
                {
                    //Console.WriteLine(line);   
                }
            }
            catch (IOException ex)
            {
                //Handle File may be in use...                    
            }
        }
    }

Also note Directory.EnumerateFiles provides overload that lets you provide a search pattern to narrow the scope of the files.

Upvotes: 1

ovaltein
ovaltein

Reputation: 1215

How you go about getting your files depends on if they are all located in the same directory of if you'll need to recursively search through a directory and all child directories. Directory.GetFiles is where you want to start. It has 3 overloads seen here. So you might try something like this:

string path = "\mypath\tosomehwere";
string searchPattern = "*.txt";
string[] MyFiles = Directory.GetFiles(path, searchPattern, SearchOption.AllDirectories);

Then just loop through the string array and proccess each file as you would normally.

foreach (string filePath in MyFiles)
{
      MyFileProcessMethod(filePath)
} 

Path.GetFileName(filePath) will return the individual text file name should you need it for your processing requirements.

Upvotes: 1

Bluetarsky
Bluetarsky

Reputation: 53

You can use Directory.GetFiles(string path) to get all files from a certain directory. You can then use a foreach loop to iterate through all the files in that directory and do your processing.

Upvotes: 2

Related Questions