Получить имена файлов без пути к определенному каталогу
Как я могу получить все имена файлов каталога (и его подкаталогов) без полного пути?
8 ответов:
вы можете извлечь имя файла из полного пути.
.NET 3, только имена файлов
var filenames3 = Directory .GetFiles(dirPath, "*", SearchOption.AllDirectories) .Select(f => Path.GetFileName(f));
.NET 4, только имена файлов
var filenames4 = Directory .EnumerateFiles(dirPath, "*", SearchOption.AllDirectories) .Select(Path.GetFileName); // <-- note you can shorten the lambda
возвращает имена файлов с относительным путем внутри каталога
// - 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));
подтвердите в 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");
отметим, что
*Files(dir, pattern, behavior)
методы могут быть упрощены для нерекурсивных*Files(dir)
варианты, если подпапки не важны
посмотреть путь.GetFileName:
возвращает имя файла и расширение указанной строки путь.
The путь класс имеет несколько полезных методов имени файла и пути.
вы хотите
Path.GetFileName
Это возвращает только имя файла (с расширением).
Если вы хотите только имя без расширения, то используйте
Path.GetFileNameWithoutExtension
вы можете просто извлечь имя файла из полного пути.
var sections = fullPath.Split('\'); var fileName = sections[sections.Length - 1];
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);
хотя есть несколько правильных ответов на эти вопросы, вы можете найти это решение как:
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) }
вы можете получить имя файла конкретного каталога с помощью
GetFiles()
методDirectoryInfo
класса. Вот пример примера, чтобы перечислить все файлы, и это детали конкретного каталога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());
В этом примере отображается список файлов в структуре таблицы HTML.