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

C# 获取没有特定目录路径的文件名,c#,.net,C#,.net,如果没有完整路径,如何获取目录(及其子目录)的所有文件名? Directory.GetFiles(…)始终返回完整路径 见: 返回指定路径字符串的文件名和扩展名 该类有几个有用的文件名和路径方法。您想要什么 这只返回文件名(带扩展名) 如果只需要不带扩展名的名称,请使用您可以从完整路径中提取文件名 var sections = fullPath.Split('\\'); var fileName = sections[sections.Length - 1]; 您可以从完整路径中提取文件名 v

如果没有完整路径,如何获取目录(及其子目录)的所有文件名? Directory.GetFiles(…)始终返回完整路径

见:

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

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

您想要什么

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


如果只需要不带扩展名的名称,请使用

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

var sections = fullPath.Split('\\');
var fileName = sections[sections.Length - 1];

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

var sections = fullPath.Split('\\');
var fileName = sections[sections.Length - 1];
.NET 3,仅限文件名 .NET 4,仅限文件名 在LinqPad中确认。。。
请注意,
*文件(dir,pattern,behavior)
方法可以简化为非递归的
*文件(dir)
变体,如果子文件夹不重要

您可以使用
DirectoryInfo
类的
GetFiles()
方法获取特定目录的文件名。 下面是一个示例,列出了所有文件及其特定目录的详细信息

System.Text.StringBuilder objSB = new System.Text.StringBuilder();
    System.IO.DirectoryInfo directory = new System.IO.DirectoryInfo("d:\\");
    objSB.Append("<table>");
    objSB.Append("<tr><td>FileName</td>" + 
                 "<td>Last Access</td>" + 
                 "<td>Last Write</td>" + 
                 "<td>Attributes</td>" + 
                 "<td>Length(Byte)</td><td>Extension</td></tr>");

    foreach (System.IO.FileInfo objFile in directory.GetFiles("*.*"))
    {
        objSB.Append("<tr>");

        objSB.Append("<td>");
        objSB.Append(objFile.Name);
        objSB.Append("</td>");

        objSB.Append("<td>");
        objSB.Append(objFile.LastAccessTime);
        objSB.Append("</td>");

        objSB.Append("<td>");
        objSB.Append(objFile.LastWriteTime);
        objSB.Append("</td>");

        objSB.Append("<td>");
        objSB.Append(objFile.Attributes);
        objSB.Append("</td>");

        objSB.Append("<td>");
        objSB.Append(objFile.Length);
        objSB.Append("</td>");

        objSB.Append("<td>");
        objSB.Append(objFile.Extension);
        objSB.Append("</td>");

        objSB.Append("</tr>");
    }
    objSB.Append("</table>");

    Response.Write(objSB.ToString());
System.Text.StringBuilder objSB=new System.Text.StringBuilder();
System.IO.DirectoryInfo directory=new System.IO.DirectoryInfo(“d:\\”);
objSB.追加(“”);
objSB.Append(“文件名”+
“最后访问”+
“最后一次写入”+
“属性”+
“长度(字节)扩展”);
foreach(System.IO.FileInfo objFile在目录.GetFiles(“**”)中)
{
objSB.追加(“”);
objSB.追加(“”);
Append(objFile.Name);
objSB.追加(“”);
objSB.追加(“”);
Append(objFile.LastAccessTime);
objSB.追加(“”);
objSB.追加(“”);
Append(objFile.LastWriteTime);
objSB.追加(“”);
objSB.追加(“”);
Append(objFile.Attributes);
objSB.追加(“”);
objSB.追加(“”);
Append(objFile.Length);
objSB.追加(“”);
objSB.追加(“”);
Append(objFile.Extension);
objSB.追加(“”);
objSB.追加(“”);
}
objSB.追加(“”);
Write(objSB.ToString());

此示例显示HTML表结构中的文件列表

尽管这个问题有几个正确的答案,但您可以找到以下解决方案:

string[] files = Directory.EnumerateFiles("C:\Something", "*.*")
                 .Select(p => Path.GetFileName(p))
                 .Where(s => s.EndsWith(".bmp", StringComparison.OrdinalIgnoreCase) || s.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase)).ToArray();

谢谢

创建DirectoryInfo对象,使用搜索模式进行枚举,然后将其视为数组

string filePath = "c:\Public\";
DirectoryInfo apple = new DirectoryInfo(@filepath);
foreach (var file in apple.GetFiles("*")
{
   //do the thing
   Console.WriteLine(file)
}

在.NET4中,您还可以执行
目录.GetFiles(path)。选择(path.GetFileName)
GetFiles
EnumerateFiles
之间的区别在于,对于前者,您必须等待整个列表被填充,然后才能开始循环遍历它,后者可以在操作系统仍在列出其他文件时开始处理前几个文件。请在.Net 3中解释我在哪里选择(f=>Path.GetFileName(f));“f”是什么used@KiranSolkar
f=>Path.GetFileName(f)
是一个lambda表达式,
f
是这个特定lambda的字符串参数。lambda是匿名函数,可以用来创建委托或表达式树类型。参数的类型是推断的,因此它相当于
(字符串完整路径)=>Path.GetFileName(完整路径)
。使用C#4,类型推断得到了改进,因此只要给lambda表达式一个方法,该方法只接受一个字符串参数并返回一些内容,您就不再需要编写lambda表达式。@drzaus感谢您编辑我的响应并提供更一致的示例。我检查了.NET4和EnumerateFiles上两个方法的性能st快了两倍。请注意,此实现仅适用于Windows…Linux和Mac使用
/
System.Text.StringBuilder objSB = new System.Text.StringBuilder();
    System.IO.DirectoryInfo directory = new System.IO.DirectoryInfo("d:\\");
    objSB.Append("<table>");
    objSB.Append("<tr><td>FileName</td>" + 
                 "<td>Last Access</td>" + 
                 "<td>Last Write</td>" + 
                 "<td>Attributes</td>" + 
                 "<td>Length(Byte)</td><td>Extension</td></tr>");

    foreach (System.IO.FileInfo objFile in directory.GetFiles("*.*"))
    {
        objSB.Append("<tr>");

        objSB.Append("<td>");
        objSB.Append(objFile.Name);
        objSB.Append("</td>");

        objSB.Append("<td>");
        objSB.Append(objFile.LastAccessTime);
        objSB.Append("</td>");

        objSB.Append("<td>");
        objSB.Append(objFile.LastWriteTime);
        objSB.Append("</td>");

        objSB.Append("<td>");
        objSB.Append(objFile.Attributes);
        objSB.Append("</td>");

        objSB.Append("<td>");
        objSB.Append(objFile.Length);
        objSB.Append("</td>");

        objSB.Append("<td>");
        objSB.Append(objFile.Extension);
        objSB.Append("</td>");

        objSB.Append("</tr>");
    }
    objSB.Append("</table>");

    Response.Write(objSB.ToString());
string[] files = Directory.EnumerateFiles("C:\Something", "*.*")
                 .Select(p => Path.GetFileName(p))
                 .Where(s => s.EndsWith(".bmp", StringComparison.OrdinalIgnoreCase) || s.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase)).ToArray();
string filePath = "c:\Public\";
DirectoryInfo apple = new DirectoryInfo(@filepath);
foreach (var file in apple.GetFiles("*")
{
   //do the thing
   Console.WriteLine(file)
}
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);