foreach loop

jassie

Well-known member
Joined
Nov 13, 2012
Messages
61
Programming Experience
1-3
I have a question about how to modify the C# 2008 desktop foreach (String RFile in RFiles) block of code and/or the code that is surrounding this block of code. The code I am referring
to is listed below. Originally the code was setup to select files in a specific file directory. Now the requirements have changed where I need to loop through
4 subfoler directories that are at the same folder level. The 4 folder levels will be: 1. C:\customer\Mon_year\Cancel, 2. C:\customer\Mon_year\ED, 3. C:\customer\Mon_year\UI, and
4. C:\customer\Mon_year\UI.
Right now these are the only folders that will be setup at this level in the directory structure. However I can see how there can potentially be other directories created at this
level in the future.
I would like to be able to resue the foreach (String RFile in RFiles) block without repeating the 4 times.
Thus can you show me how to modify this code and/or tell me how I can change this code?
   public String addNewPKG()
        {
            {
                try
                {
                    String packageId = "";
                    int intReviewFileCount = 0;
                    string Format_year = DateTime.Now.AddMonths(-1).ToString("yyyy");
                    string strMonth = DateTime.Now.AddMonths(-1).ToString("MMMM").ToUpper();
                    string Format_Date = "_" + strMonth.Substring(0, 3) + "_" + Format_year;
                    String filesaveLocation = null;
                    filesaveLocation = Path.Combine(ConfigurationSettings.AppSettings["tLocation"], Format_Date);
                    string strCancel = "Cancel";
                    string strED = "ED";
                    string strUI = "UI";
                    string strRCS = "RCS";
                    //string strsubfilesaveLocation = Path.Combine(filesaveLocation,strCancel);
                    //string strsubfilesaveLocation = Path.Combine(filesaveLocation, strED);
                    //string strsubfilesaveLocation = Path.Combine(filesaveLocation, strUI);
                    string strsubfilesaveLocation = Path.Combine(filesaveLocation, strRCS);
                    if (!Directory.Exists(strsubfilesaveLocation))
                    { 
                        System.IO.Directory.CreateDirectory(strsubfilesaveLocation);
                        logging.Error("The location " + strsubfilesaveLocation + " does not exist for documents. ");
                        return packageId;
                    }
                    else
                    {
                       string[] RVWFiles = (from path in Directory.GetFiles(strsubfilesaveLocation)
                                             let name = Path.GetFileName(path)
                                             where name.EndsWith(".pdf") ||
                                             name.EndsWith(".xlsx") ||
                                             name.EndsWith(".xls")
                                             select path).ToArray();
                        if (RVWFiles.Length == 0)
                        {
                            logging.Info("packageId: " + packageId + " the location " + strsubfilesaveLocation + " does not contain any documents. ");
                            return packageId;
                        }
                        foreach (String RFile in RFiles)
                       
                        {
                            string orgnizationName = "";
                            string contactName = "";
                            string fileNameWithExtension = Path.GetFileName(RFile);
                            string fileName = Path.GetFileNameWithoutExtension(RFile);
                            string Original_location = filesaveLocation;
                            string[] names = fileName.Split('_');
                            orgnizationName = names[0].TrimEnd();
                            contactName = names[1].TrimStart();
                            
                            string strOrgnizationName = orgnizationName;
                           
                            string[] items = contactName.TrimEnd().Split(' ');
                            string surname = items[items.Length - 1];
                            --here does the processing that is required--
                          
                        return null;
                    } //closing bracket for  foreach (String RFile in RFiles)
                }
                catch (Exception e)
                {
                    logging.Error("Error Processing --> " + e.Message);
                    logging.Error("************* Stack Trace *******************");
                    logging.Error(e.StackTrace);
                    throw new Exception(e.Message);
                }
            }
                
        }
 
Last edited by a moderator:

jmcilhinney

C# Forum Moderator
Staff member
Joined
Apr 23, 2011
Messages
3,151
Location
Sydney, Australia
Programming Experience
10+
I have added formatting tags around your code snippets. Please do so for us in future.

Put the code to search one folder into a method. You can then call that method multiple times for multiple folders. If you need to search every subfolder in a parent folder then you can call the method in a loop.
 

jassie

Well-known member
Joined
Nov 13, 2012
Messages
61
Programming Experience
1-3
How do you place format items around the code? Are there directions I can follow or a reference you can point me to on what to follow?
 

jmcilhinney

C# Forum Moderator
Staff member
Joined
Apr 23, 2011
Messages
3,151
Location
Sydney, Australia
Programming Experience
10+
How do you place format items around the code? Are there directions I can follow or a reference you can point me to on what to follow?
Given that post #1 in this thread now contains the formatting tags, maybe looking at post #1 in this thread would be a good place to start. You might also consider using the FAQ link at the top of every page. If a question is likely to have been asked before, the FAQ is the first place you should look no matter where you are.
 
Top Bottom