0

i have a function named GetFileList.Here am giving different extension to the function by seperating it using ;.My issue is that the value in the string[] FileList during the first iteration is losing during the second iteration.How can populate FileList with data from all iteation

public static string[] GetFileList(string Directory,string extensions)
   {
       string[] extensionlist = extensions.Split(';');
       FileList = new string[] { };
       foreach (string extension in extensionlist)
       {
           FileList =System.IO.Directory.GetFiles(Directory, "*." + extension, System.IO.SearchOption.AllDirectories);


       }
       return FileList;
   }

3 Answers 3

1

simply use AddRange and use a list for doing that:

public static string[] GetFileList(string Directory,string extensions)
   {
       string[] extensionlist = extensions.Split(';');
       List<string> FileList = new List<string>();
       foreach (string extension in extensionlist)
       {
           FileList.AddRange(System.IO.Directory.GetFiles(Directory, "*." + extension, System.IO.SearchOption.AllDirectories)); 
       }
       return FileList.ToArray();
   }
Sign up to request clarification or add additional context in comments.

2 Comments

am not using ArrayList.it is a sting[]
You have to use a collection. Array size is immutable than it can't grow. The issue is that you replace array reference with shiny new array and it is not an addition. You will finish with array from last iteration (contains only files with last extension)
0

You can use LINQ:

string[] FileList =  extensions.Split(';').Distinct()
    .SelectMany(ex => System.IO.Directory.GetFiles(Directory, "*." + ex, SearchOption.AllDirectories))
    .ToArray();

Comments

0

Try following code if you are using .net 4.5+ Directory.EnumerateFiles will give more faster result

public static string[] GetFileList(string Directory, string extensions)
{
    string[] extensionlist = extensions.Split(';');
    var FileList = Directory.EnumerateFiles(Directory)
        .Where(file => extensionlist.Contains(Path.GetExtension(file))).ToArray<string>();
    return FileList;
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.