יום שני, 11 באוקטובר 2010

ProcessDir - פונקציה רקורסיבית לסריקת תיקיות



//define at the program head
int  HowDeepToScan = 3;  //how deep the algo should enter:
string file_ext = ".exe";   //the file extension
List<string> fName_list = new List<string>(); //save the file list in this 'List<string>'


public void ProcessDir(string sourceDir, int recursionLvl)
{
            if (recursionLvl <= HowDeepToScan)
            {
                // Process the list of files found in the directory. 
                string[] fileEntries = Directory.GetFiles(sourceDir);

                foreach (string fileName in fileEntries)
                {
                    // do something with fileName
                    if (fileName.ToLower().Contains(file_ext))
                        fName_list.Add(fileName);
                }


                // Recurse into subdirectories of this directory.
                string[] subdirEntries = Directory.GetDirectories(sourceDir);

                foreach (string subdir in subdirEntries)
                {
                    // Do not iterate through reparse points
                    if ((File.GetAttributes(subdir) &
                          FileAttributes.ReparsePoint) !=
                            FileAttributes.ReparsePoint)
                        //than, recurs: 
                        ProcessDir(subdir, recursionLvl + 1);
                }
            }
}


הפונקציה הזאת מקבלת שם תיקיה ראשית ומספר המציין את עומק הכניסה של האלגוריתם אל תוך תיקיות המשנה, ומבצעת פעולה כלשהיא בתוך תיקיות המשנה.
קריאה לפונקציה תהיה למשל:
ProcessDir("c:\\", 1);
בקוד המוצג למעלה הדגמתי ריצה על קבצים exe
במקרה ששם הקובץ מכיל (מסתיים) עם סיומת  .exe
אז תוסיף אותו לרשימה המכילה את שמות הקבצים.



אין תגובות:

הוסף רשומת תגובה