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