recursion - Add recursive command to set sub directory permissions in C# -


i add recursive command script allows loop through current direcotries sub directory/files , set permissions on subfolders/files whatever like. here have far allows permissions changed on first set of subdirectories. obviously, can add samecode in keep diving down through folder structure, not every root folder have same amount of sub folders within it. want add recursive command loop through subdirectories , when there no more, move on next root folder.

using system; using system.collections.generic; using system.componentmodel; using system.data; using system.drawing; using system.linq; using system.text; using system.windows.forms; using system.io; using system.security.accesscontrol; using system.management; using system.management.instrumentation;  namespace applypermissions {     public partial class form1 : form     {         public form1()         {             initializecomponent();         }          private void form1_load(object sender, eventargs e)         {          }          private void label1_click(object sender, eventargs e)         {          }          private void selectdirectorybtn_click(object sender, eventargs e)         {             folderbrowserdialog myfolderbrowserdialog = new folderbrowserdialog();             myfolderbrowserdialog.showdialog();             selecteddirbox.text = myfolderbrowserdialog.selectedpath.tostring();              try             {                 directoryinfo mydirectoryinfo = new directoryinfo(selecteddirbox.text);                 foreach (directoryinfo currentdir in mydirectoryinfo.getdirectories())                 {                      toolstripstatuslabel1.text = currentdir.name;                     directorysecurity dirsecurity = currentdir.getaccesscontrol();                     dirsecurity.addaccessrule(new filesystemaccessrule(“whatever permissions group choose”, filesystemrights.createfiles, accesscontroltype.allow));                                     currentdir.setaccesscontrol(dirsecurity);                      // step thru each file within current directory , assign access                     foreach (fileinfo currentfile in currentdir.getfiles())                     {                         filesecurity filesecurity = currentfile.getaccesscontrol();                         filesecurity.addaccessrule(new filesystemaccessrule("whatever permissions group choose", filesystemrights.fullcontrol, accesscontroltype.allow));                         currentfile.setaccesscontrol(filesecurity);                     }                      foreach (directoryinfo subdir in currentdir.getdirectories ())                     {                           toolstripstatuslabel1.text = currentdir.name + "/" + subdir.name;                         directorysecurity allsubdirsecurity = subdir.getaccesscontrol();                         allsubdirsecurity.addaccessrule(new filesystemaccessrule("whatever permissions group choose ", filesystemrights.fullcontrol, accesscontroltype.allow));                         subdir.setaccesscontrol(allsubdirsecurity);                          // step thru each file within current subdirectory , assign access                         foreach (fileinfo currentfile in subdir.getfiles())                         {                             filesecurity filesecurity = currentfile.getaccesscontrol();                             filesecurity.addaccessrule(new filesystemaccessrule("whatever permissions group choose", filesystemrights.fullcontrol, accesscontroltype.allow));                             currentfile.setaccesscontrol(filesecurity);                         }                     }                 }                  labelfinished.text = "completed successfully";             }             catch (exception ex)             {                 messagebox.show(ex.message + "/////////////////" + ex.stacktrace);             }         }     } } 

first, if target framework 4.0, recommend use directory.enumeratefiles method (you can find 3rd code same thing.)

assuming no-go, can simplify recursive processing using yield keyword, e.g. make traverse method based on yield -- i'm showing filter function since useful in directory traversal ad should give ideas.

static ienumerable<string> traverse(string path, func<string, bool> filter) {     foreach (string f in directory.getfiles(path).where(filter))     {         yield return f;     }      foreach (string d in directory.getdirectories(path))     {         foreach (string f in traverse(d, filter))         {             yield return f;         }     } } 

then use traversal() way

var files = traverse(path, where); foreach (string f in files) { dowhatever; } 

you have more reusable directory traversal @ fingertips. know not yielding directories in snippet above, if wanted process both files , directory, base on directoryinfo.getfilesysteminfos method instead.

i forget when yield feature added, has been available quite while.