klijo
klijo

Reputation: 16451

convert a FileInfo array into a String array C#

I create a FileInfo array like this

 try
            {
                DirectoryInfo Dir = new DirectoryInfo(DirPath);
                FileInfo[] FileList = Dir.GetFiles("*.*", SearchOption.AllDirectories);


                foreach (FileInfo FI in FileList)
                {
                    Console.WriteLine(FI.FullName);
                }

            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }

And this array holds all the file names in folder = DirPath

I thought of looping through the FileInfo array and copy it to a String array. Is this ok or is there a much cleaner method ?

Upvotes: 9

Views: 21463

Answers (4)

Sarath Subramanian
Sarath Subramanian

Reputation: 21321

Try this one

DirectoryInfo directory = new DirectoryInfo("your path");
List<string> Files = (directory.GetFiles().Where(file => file.LastWriteTime >= date_value)).Select(f => f.Name).ToList();

If you don't want a filter with date, you can simply convert with the below code

List<string> logFiles = directory.GetFiles().Select(f => f.Name).ToList();

If you need the full path of the file, you can use FullName instead of Name.

Upvotes: 0

Leonardo
Leonardo

Reputation: 1719

the linq is a great soluction, but for the persons who don't want to use linq, i made this function:

    static string BlastWriteFile(FileInfo file)
    {
        string blasfile = " ";
        using (StreamReader sr = file.OpenText())
        {
            string s = " ";
            while ((s = sr.ReadLine()) != null)
            {
                blasfile = blasfile + s + "\n";
                Console.WriteLine();
            }
        }
        return blasfile;
    }

Upvotes: 1

Jason Axelson
Jason Axelson

Reputation: 4675

If you want to go the other way (convert string array into FileInfo's) you can use the following:

string[] files;
var fileInfos = files.Select(f => new FileInfo(f));
List<FileInfo> infos = fileInfos.ToList<FileInfo>();

Upvotes: 3

Oded
Oded

Reputation: 499112

Using LINQ:

FileList.Select(f => f.FullName).ToArray();

Alternatively, using Directory you can get filenames directly.

string[] fileList = Directory.GetFiles(DirPath, "*.*", 
                                       SearchOption.AllDirectories);

Upvotes: 16

Related Questions