Link to home
Start Free TrialLog in
Avatar of wizkid2332
wizkid2332

asked on

reading through directories and files in .NET

I have a program that is searching through a specified directory and its subdirectories.
I want to list for this directory and each subdirectory the names of all files that
contain a specific word, lets say for example: "duck".  I will then add that file to a textbox display.

The code snippet I have, I thought should work...but I am not reading in any files.  Is it how I am cheching for 'duck"?    if (file.Contains("duck") )

Thanks.
private void listFiles(string a_directory)
        {
            // get a list of all the files directories within the directory.
            string[] files = Directory.GetFiles(a_directory);
            string[] directories = Directory.GetDirectories(a_directory);
 
            foreach (string file in files)
            {
                // display only files that have gteater assecced time
                if (file.Contains("duck") )
                {
                    txt_results.Text += file + "\r\n";
                }
 
            }
            // go through all the directories and do the same thing.
            foreach (string dir in directories)
            {
                if (dir.Contains("duck"))
                {
                    txt_results.Text += dir + "\r\n";
                }
 
                // call recursivly to hit all directories
                listFiles(dir);
            }
        
        }

Open in new window

Avatar of wizkid2332
wizkid2332

ASKER

actually--I realized I was not reading through the actual files...just cheking the names of the files--but I added a hash function and still can not get it to work...
 private Hashtable hashTbl = new Hashtable();
 
 
            // generate all of the directories and files.
            listFiles(directory);
        }
        private void listFiles(string a_directory)
        {
            // get a list of all the files directories within the directory.
            string[] files = Directory.GetFiles(a_directory);
            string[] directories = Directory.GetDirectories(a_directory);
 
            foreach (string file in files)
            {
              
                    // read and store data
                     readData(file);
                     // display results
                     display();
          
 
            }
            // go through all the directories and do the same thing.
            foreach (string dir in directories)
            {
 
                // call recursivly to hit all directories
                listFiles(dir);
            }
        
        }
 
        private void readData(string path)
        {
            try
            {
                // open file for reading
                StreamReader stream = new StreamReader(path);
 
                // * means give me 1 or more blanks after delims
                string pattern = @"[ ,:.;{}()&\n\r\t\s ] *";
 
                Regex rx = new Regex(pattern);
 
                // read the file to the end
                string text = stream.ReadToEnd();
 
                // close file after reading through
                stream.Close();
 
                // split using the patern
                string[] words = rx.Split(text);
 
                foreach (string wrd in words)
                {
                    if (wrd == "duck")
                    {
                    // add words to the hash table
                        hashTbl.Add(path, "1");
                    }
 
                }
 
            }
            catch (IOException)
            {
                // display error if read fails
                MessageBox.Show("Problem reading from the file " + path);
 
            }
        }
 
        private void display()
        {
            foreach (DictionaryEntry de in hashTbl)
            {
                // display information to the output box
                txt_results.Text += "Word: " + de.Key  + " times." + "\r\n";
 
            }
 
        }

Open in new window

I hope I'm not asking stupid or insulting questions, but I just want to be sure I understand what you are trying to accomplish.

- Is this being called from a WinForms application or a Web app? If it is being called from a web app, I'm just confirming that you know that the directory traversal will be done on the server, not on the client (i.e. browser). So, if the server has no files with that name, you will get an empty list.

I ran your function "as-is" within a WinForms app, and it worked fine...even with some mixed case file names.

Have you tried matching for a different pattern in the filename? Does this work?
Ooops...my other question was to confirm that you were looking to match the filename not the file contents. It looks like you are wanting to match the contents.

Are you searching text files, binary files or both?
I am searching text files.  It is a WinForms application. thanks!
but--on my second post, I am trying to search the contents, but I am not getting any results in my display...
Change the following
                   if (wrd == "duck")
To something like this:
                  if(wrd.Contains("duck"))
ASKER CERTIFIED SOLUTION
Avatar of novynov
novynov
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial