Solved

reading through directories and files in .NET

Posted on 2008-10-29
7
244 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
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

 

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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In my previous two articles we discussed Binary Serialization (http://www.experts-exchange.com/A_4362.html) and XML Serialization (http://www.experts-exchange.com/A_4425.html). In this article we will try to know more about SOAP (Simple Object Acces…
More often than not, we developers are confronted with a need: a need to make some kind of magic happen via code. Whether it is for a client, for the boss, or for our own personal projects, the need must be satisfied. Most of the time, the Framework…
Migrating to Microsoft Office 365 is becoming increasingly popular for organizations both large and small. If you have made the leap to Microsoft’s cloud platform, you know that you will need to create a corporate email signature for your Office 365…
This is used to tweak the memory usage for your computer, it is used for servers more so than workstations but just be careful editing registry settings as it may cause irreversible results. I hold no responsibility for anything you do to the regist…

910 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

21 Experts available now in Live!

Get 1:1 Help Now