如何在没有完整路径的情况下获取目录(及其子目录)的所有文件名? Directory.GetFiles(...)始终返回完整路径!
Vas*_*sea 89
您可以从完整路径中提取文件名.
var filenames3 = Directory
.GetFiles(dirPath, "*", SearchOption.AllDirectories)
.Select(f => Path.GetFileName(f));
Run Code Online (Sandbox Code Playgroud)
var filenames4 = Directory
.EnumerateFiles(dirPath, "*", SearchOption.AllDirectories)
.Select(Path.GetFileName); // <-- note you can shorten the lambda
Run Code Online (Sandbox Code Playgroud)
// - file1.txt
// - file2.txt
// - subfolder1/file3.txt
// - subfolder2/file4.txt
var skipDirectory = dirPath.Length;
// because we don't want it to be prefixed by a slash
// if dirPath like "C:\MyFolder", rather than "C:\MyFolder\"
if(!dirPath.EndsWith("" + Path.DirectorySeparatorChar)) skipDirectory++;
var filenames4s = Directory
.EnumerateFiles(dirPath, "*", SearchOption.AllDirectories)
.Select(f => f.Substring(skipDirectory));
Run Code Online (Sandbox Code Playgroud)
filenames3.SequenceEqual(filenames4).Dump(".NET 3 and 4 methods are the same?");
filenames3.Dump(".NET 3 Variant");
filenames4.Dump(".NET 4 Variant");
filenames4s.Dump(".NET 4, subfolders Variant");
Run Code Online (Sandbox Code Playgroud)
请注意,如果子文件夹不重要,则*Files(dir, pattern, behavior)可以将方法简化为非递归*Files(dir)变体
您只需从完整路径中提取文件名即可.
var sections = fullPath.Split('\\');
var fileName = sections[sections.Length - 1];
Run Code Online (Sandbox Code Playgroud)
string fileName = @"C:\mydir\myfile.ext";
string path = @"C:\mydir\";
string result;
result = Path.GetFileName(fileName);
Console.WriteLine("GetFileName('{0}') returns '{1}'",
fileName, result);
result = Path.GetFileName(path);
Console.WriteLine("GetFileName('{0}') returns '{1}'",
path, result);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
88462 次 |
| 最近记录: |