Как получить только имена файлов в каталоге с помощью С#?

Когда я использую строку кода, как показано ниже, я получаю строковый массив, содержащий весь путь к отдельным файлам.

private string[] pdfFiles = Directory.GetFiles("C:\\Documents", "*.pdf");

Я хотел бы знать, есть ли способ получить имена файлов в строках, а не целые пути.

Ответ 1

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

private string[] pdfFiles = Directory.GetFiles("C:\\Documents", "*.pdf")
                                     .Select(Path.GetFileName)
                                     .ToArray();

РЕДАКТИРОВАТЬ: решение выше использует LINQ, поэтому он требует .NET 3.5 по крайней мере. Вот решение, которое работает на более ранних версиях:

private string[] pdfFiles = GetFileNames("C:\\Documents", "*.pdf");

private static string[] GetFileNames(string path, string filter)
{
    string[] files = Directory.GetFiles(path, filter);
    for(int i = 0; i < files.Length; i++)
        files[i] = Path.GetFileName(files[i]);
    return files;
}

Ответ 2

Вы можете использовать метод Path.GetFileName(yourFileName); (MSDN), чтобы просто получить имя файла.

Ответ 3

Вы можете использовать классы DirectoryInfo и FileInfo.

//GetFiles on DirectoryInfo returns a FileInfo object.
var pdfFiles = new DirectoryInfo("C:\\Documents").GetFiles("*.pdf");

//FileInfo has a Name property that only contains the filename part.
var firstPdfFilename = pdfFiles[0].Name;

Ответ 4

Существует так много способов:)

Первый способ:

string[] folders = Directory.GetDirectories(path, "*", SearchOption.TopDirectoryOnly);
string jsonString = JsonConvert.SerializeObject(folders);

Второй способ:

string[] folders = new DirectoryInfo(yourPath).GetDirectories().Select(d => d.Name).ToArray();

Третий способ:

string[] folders = 
    new DirectoryInfo(yourPath).GetDirectories().Select(delegate(DirectoryInfo di)
    {
        return di.Name;
    }).ToArray();

Ответ 5

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GetNameOfFiles
{
    public class Program
    {
        static void Main(string[] args)
        {
           string[] fileArray = Directory.GetFiles(@"YOUR PATH");
           for (int i = 0; i < fileArray.Length; i++)
           {

               Console.WriteLine(fileArray[i]);
           }
            Console.ReadLine();
        }
    }
}

Ответ 6

Вы можете просто использовать linq

Directory.EnumerateFiles(LoanFolder).Select(file => Path.GetFileName(file));

Примечание: EnumeratesFiles более эффективен по сравнению с Directory.GetFiles, поскольку вы можете начать перечисление коллекции имен до того, как будет возвращена вся коллекция.

Ответ 7

string[] fileEntries = Directory.GetFiles(directoryPath);

foreach (var file_name in fileEntries){
    string fileName = file_name.Substring(directoryPath.Length + 1);
    Console.WriteLine(fileName);
}