Solved

reading through directories and files in .NET

Posted on 2008-10-29
7
243 Views
Last Modified: 2013-12-17
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

0
Comment
Question by:wizkid2332
  • 3
  • 3
7 Comments
 

Author Comment

by:wizkid2332
ID: 22835077
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

0
 
LVL 4

Expert Comment

by:novynov
ID: 22835162
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?
0
 
LVL 4

Expert Comment

by:novynov
ID: 22835196
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?
0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 

Author Comment

by:wizkid2332
ID: 22835514
I am searching text files.  It is a WinForms application. thanks!
0
 

Author Comment

by:wizkid2332
ID: 22835659
but--on my second post, I am trying to search the contents, but I am not getting any results in my display...
0
 
LVL 9

Expert Comment

by:DrAske
ID: 22836054
Change the following
                   if (wrd == "duck")
To something like this:
                  if(wrd.Contains("duck"))
0
 
LVL 4

Accepted Solution

by:
novynov earned 150 total points
ID: 22836145
I'm running your code now and am getting matches...as well as display in the textbox.

One thing I noticed is that you are calling display() after each file is processed. This has the effect of adding some items multiple times to the textbox. Is this what you intended? This isn't likely the problem you are having...I just noticed it.

Can you attach one of the text files you believe should be matching, so I can try it with your data?

0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Many of us here at EE write code. Many of us write exceptional code; just as many of us write exception-prone code. As we all should know, exceptions are a mechanism for handling errors which are typically out of our control. From database errors, t…
Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
This video discusses moving either the default database or any database to a new volume.
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now