获取没有特定目录路径的文件名

Kot*_*tan 58 .net c#

如何在没有完整路径的情况下获取目录(及其子目录)的所有文件名? Directory.GetFiles(...)始终返回完整路径!

Vas*_*sea 89

您可以从完整路径中提取文件名.

.NET 3,仅限文件名

var filenames3 = Directory
                .GetFiles(dirPath, "*", SearchOption.AllDirectories)
                .Select(f => Path.GetFileName(f));
Run Code Online (Sandbox Code Playgroud)

.NET 4,仅限文件名

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)

在LinqPad确认...

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)变体

  • 在.NET 4中,您还可以执行`Directory.GetFiles(path).Select(Path.GetFileName)`.`GetFiles`和`EnumerateFiles`之间的区别在于,对于前者,你必须等待整个列表被填充才能开始循环它,后者你可以开始处理OS中的前几个文件仍然列出其他的. (2认同)

Mit*_*eat 17

请参见Path.GetFileName:

返回指定路径字符串的文件名和扩展名.

路径类有几个有用的文件名和路径方法.


Chr*_*isF 8

你要 Path.GetFileName

这只返回文件名(带扩展名).

如果您只想要没有扩展名的名称,请使用 Path.GetFileNameWithoutExtension


Mat*_*nde 5

您只需从完整路径中提取文件名即可.

var sections = fullPath.Split('\\');
var fileName = sections[sections.Length - 1];
Run Code Online (Sandbox Code Playgroud)


San*_*nur 5

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)