0

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

Directory.GetFiles(_dirPath, File_Filter);

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

C:\temp\test.txt

新代码需要创建一个元组,每个元组看起来都类似于:

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

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

4

3 回答 3

5

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

Tuple<string, string>[] result = Directory.EnumerateFiles(_dirPath, File_Filter)
    .Select(fn => Tuple.Create( fn, Path.GetFileName(fn) ))
    .ToArray();
于 2013-12-04T12:34:01.143 回答
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.Item1and更具可读性tuple.Item2。或者至少使用一些匿名类型而不是元组,如果您不需要在方法之间传递这些数据:

var files = from f in Directory.EnumerateFiles(_dirPath, File_Filter)
            select new {
                Name = Path.GetFileName(f),
                FullName = f
            };
于 2013-12-04T12:32:55.720 回答
-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);
}
于 2013-12-04T12:48:00.713 回答