Подтвердить что ты не робот

Получить имена файлов без пути к определенному каталогу

Как я могу получить все имена файлов в каталоге (и его подкаталогах) без полного пути? Directory.GetFiles(...) возвращает всегда полный путь!

4b9b3361

Ответ 1

Вы можете извлечь имя файла из полного пути.

.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), если вложенные папки не важны

Ответ 2

См. Path.GetFileName:

Возвращает имя файла и расширение указанной строки пути.

Path Класс содержит несколько полезных имен файлов и методов пути.

Ответ 3

Вы можете просто извлечь имя файла из полного пути.

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

Ответ 4

Вы хотите Path.GetFileName

Это возвращает только имя файла (с расширением).

Если вы хотите просто имя без расширения, используйте Path.GetFileNameWithoutExtension

Ответ 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);

Ответ 6

Хотя для этого есть несколько правильных ответов, вы можете найти это решение как:

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

Спасибо

Ответ 7

Создайте объект DirectoryInfo, используйте шаблон поиска для перечисления, а затем обработайте его как массив.

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

Ответ 8

Вы можете получить имя файла определенного каталога, используя метод 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.