我正在使用“GetFiles”来提取指定文件夹中的文件,如下所示:
Directory.GetFiles(_dirPath, File_Filter);
这创建了一个很好的字符串数组,但现在我需要做类似的事情,但是创建一个Tuple数组,其中每个元组都包含完整路径,包括文件名和文件名。所以目前我的字符串中有这个
C:\temp\test.txt
新代码需要创建一个元组,其中每个类似于:
Item1 = C:\temp\test.txt
Item2 = test.txt
我猜我可以用一点Linq做到这一点,但我不确定。速度和效率是一个太大的问题,因为列表将非常小。
答案 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.Item1
和tuple.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);
}