C #을 사용하여 디렉토리 내에서 파일 이름 만 얻는 방법은 무엇입니까?


80

아래 코드 줄을 사용하면 개별 파일의 전체 경로를 포함하는 문자열 배열을 얻습니다.

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

전체 경로가 아닌 문자열에서만 파일 이름을 검색하는 방법이 있는지 알고 싶습니다.

답변:


160

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;
}

안녕하세요 Thomas,이 'System.Array'에 'Select'에 대한 정의가 포함되어 있지 않고 'System.Array'유형의 첫 번째 인수를 허용하는 확장 메서드 'Select'를 찾을 수 없다는 오류가 발생합니다 (사용중인 지시문 또는 어셈블리 참조?) 고려해야 할 다른 사항이 있습니까?
HelloWorld_Always

using System.Linq;파일의 시작 부분에 추가 하고 System.Core아직없는 경우 어셈블리에 대한 참조를 추가합니다 . .NET 3.5 이상이 필요합니다. 필요한 경우 .NET 2.0에 대한 솔루션을 게시하겠습니다
Thomas Levesque 2011 년

9

방법 Path.GetFileName(yourFileName); (MSDN) 을 사용 하여 파일 이름 만 가져올 수 있습니다.


문제는 단일 문자열 값 처리가 아닌 항목 모음에 관한 것입니다.
Tigran 2011-08-21

7

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;

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

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

3
답변에 대한 설명을 제공 할 수 있습니까? 귀하의 솔루션이 Thomas Levesque의 8 년 동안의 답변과 실질적으로 다른 점을 설명해 주시겠습니까? 특히, 잠재적으로 더 강력한 방식으로 동일한 기능을 Substring사용 하는 대신 사용하는 이유를 설명 할 수 Path있습니까?
Wyck

1

너무 많은 방법이 있습니다 :)

첫 번째 방법 :

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();

0
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();
        }
    }
}

0

간단히 linq를 사용할 수 있습니다.

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

참고 : 전체 컬렉션이 반환되기 전에 이름 컬렉션 열거를 시작할 수 있으므로 EnumeratesFiles는 Directory.GetFiles에 비해 더 효율적입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.