使用GetFiles但分割结果以显示完整路径和文件名

时间:2013-12-04 12:30:53

标签: c# linq getfiles

我正在使用“GetFiles”来提取指定文件夹中的文件,如下所示:

Directory.GetFiles(_dirPath, File_Filter);

这创建了一个很好的字符串数组,但现在我需要做类似的事情,但是创建一个Tuple数组,其中每个元组都包含完整路径,包括文件名和文件名。所以目前我的字符串中有这个

C:\temp\test.txt

新代码需要创建一个元组,其中每个类似于:

Item1 = C:\temp\test.txt
Item2 = test.txt

我猜我可以用一点Linq做到这一点,但我不确定。速度和效率是一个太大的问题,因为列表将非常小。

3 个答案:

答案 0 :(得分:5)

您应该将Directory.EnumerateFiles与LINQ一起使用,如果您不需要使用所有文件,则可以提高性能。然后使用Path class

Tuple<string, string>[] result = Directory.EnumerateFiles(_dirPath, File_Filter)
    .Select(fn => Tuple.Create( fn, Path.GetFileName(fn) ))
    .ToArray();

答案 1 :(得分:2)

使用DirectoryInfo.GetFiles返回同时包含文件名和全名的FileInfo个实例:

var directory = new DirectoryInfo(_dirPath);
var files = directory.GetFiles(File_Filter);

foreach(var file in files)
{
    // use file.FullName
    // use file.Name
}

这比tuple.Item1tuple.Item2更具可读性。或者至少使用一些匿名类型而不是元组,如果你不需要在方法之间传递这个数据:

var files = from f in Directory.EnumerateFiles(_dirPath, File_Filter)
            select new {
                Name = Path.GetFileName(f),
                FullName = f
            };

答案 2 :(得分:-1)

string[] arrayOfFiles = Directory.GetFiles(PathName.Text); // PathName contains the Path to your folder containing files//
string fullFilePath = "";
string fileName = "";
foreach (var file in arrayOfFiles)
{
    fullFilePath = file;
    fileName = System.IO.Path.GetFileName(file);
}