development

확장자없이 파일 이름 얻기

big-blog 2020. 3. 31. 08:22
반응형

확장자없이 파일 이름 얻기


특정 폴더에서 파일 이름을 가져올 때 :

DirectoryInfo di = new DirectoryInfo(currentDirName);
FileInfo[] smFiles = di.GetFiles("*.txt");
foreach (FileInfo fi in smFiles)
{
    builder.Append(fi.Name);
    builder.Append(", ");
    ...
}

fi.Name나에게 그것의 확장자를 가진 파일 이름을 제공 : file1.txt, file2.txt, file3.txt.

확장자없이 파일 이름을 얻으려면 어떻게해야합니까? ( file1, file2, file3)


당신은 사용할 수 있습니다 Path.GetFileNameWithoutExtension:

foreach (FileInfo fi in smFiles)
{
    builder.Append(Path.GetFileNameWithoutExtension(fi.Name));
    builder.Append(", ");
}

나는 이것을 직접 얻을 수있는 방법이 없다는 것에 놀랐지 만 FileInfo(또는 적어도 그것을 볼 수는 없다).


사용하십시오 Path.GetFileNameWithoutExtension().


이 솔루션은 또한 후행 쉼표를 추가하지 못하게합니다.

var filenames = String.Join(
                    ", ",
                    Directory.GetFiles(@"c:\", "*.txt")
                       .Select(filename => 
                           Path.GetFileNameWithoutExtension(filename)));

이 시나리오에서는 DirectoryInfo, FileInfo가 마음에 들지 않습니다.

DirectoryInfo 및 FileInfo는 필요한 것보다 많은 폴더와 파일에 대한 데이터를 수집하므로 필요한 것보다 많은 시간과 메모리를 소비합니다.


사용하십시오 Path.GetFileNameWithoutExtension. 경로는 System.IO 네임 스페이스에 있습니다.


Path.GetFileNameWithoutExtension(file);

확장명없이 파일 이름 만 반환합니다. 이름과 파일 형식을 모두 얻을 수 있도록 변경할 수도 있습니다.

 Path.GetFileName(FileName);

출처 : https://msdn.microsoft.com/en-us/library/system.io.path(v=vs.110).aspx


추가 답변으로 (또는 기존 답변을 합성하기 위해) DirectoryInfo 클래스 내에서이를 위해 확장 메소드를 작성할 수 있습니다. 다음은 디렉토리 이름 또는 기타 수정 기준 등을 제공하기 위해 꾸며질 수있는 상당히 빨리 작성한 샘플입니다.

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

namespace DocumentDistributor.Library
{
    public static class myExtensions
    {
        public static string[] GetFileNamesWithoutFileExtensions(this DirectoryInfo di)
        {
            FileInfo[] fi = di.GetFiles();
            List<string> returnValue = new List<string>();

            for (int i = 0; i < fi.Length; i++)
            {
                returnValue.Add(Path.GetFileNameWithoutExtension(fi[i].FullName)); 
            }

            return returnValue.ToArray<string>();
         }
    }
}

편집 : 또한이 방법이 배열 구성을 달성하기 위해 LINQ를 사용하면 단순화되거나 멋지게 될 수 있다고 생각하지만 LINQ에서 이러한 종류의 샘플을 충분히 빨리 수행 할 수있는 경험이 없습니다.

편집 2 (거의 4 년 후) : 내가 사용할 LINQ 인증 방법은 다음과 같습니다.

public static class myExtensions
{
    public static IEnumerable<string> GetFileNamesWithoutExtensions(this DirectoryInfo di)
    {
        return di.GetFiles()
            .Select(x => Path.GetFileNameWithoutExtension(x.FullName));
    }
}

파일 이름에 디렉토리가 포함되어 있고 디렉토리를 잃을 필요가없는 경우 :

fileName.Remove(fileName.LastIndexOf("."))

FileInfo 자체 확장명을 알고 있으므로 제거 할 수 있습니다.

fileInfo.Name.Replace(fileInfo.Extension, "");
fileInfo.FullName.Replace(fileInfo.Extension, "");

또는 중간에 나타날 수있는 편집증이 있거나 미세 최적화를 원할 경우 :

file.Name.Substring(0, file.Name.Length - file.Extension.Length)

기록만을 위해서:

DirectoryInfo di = new DirectoryInfo(currentDirName);
FileInfo[] smFiles = di.GetFiles("*.txt");
string fileNames = String.Join(", ", smFiles.Select<FileInfo, string>(fi => Path.GetFileNameWithoutExtension(fi.FullName)));

이 방법은 사용하지 StringBuilder않지만 String.Join(). 또한 다른 답변 중 하나에서 보지 않았으므로 Path.GetFileNameWithoutExtension()전체 경로 ( fi.FullName) 필요 하다는 점을 언급하십시오 fi.Name.


이 시도,

string FileNameAndExtension =  "bılah bılah.pdf";
string FileName = FileNameAndExtension.Split('.')[0];

using System;

using System.IO;

public class GetwithoutExtension
{

    public static void Main()
    {
        //D:Dir dhould exists in ur system
        DirectoryInfo dir1 = new DirectoryInfo(@"D:Dir");
        FileInfo [] files = dir1.GetFiles("*xls", SearchOption.AllDirectories);
        foreach (FileInfo f in files)
        {
            string filename = f.Name.ToString();
            filename= filename.Replace(".xls", "");
            Console.WriteLine(filename);
        }
        Console.ReadKey();

    }

}

참고 URL : https://stackoverflow.com/questions/4804990/getting-file-names-without-extensions

반응형