programing

확장명 없이 파일 이름 가져오기

muds 2023. 5. 11. 21:59
반응형

확장명 없이 파일 이름 가져오기

특정 폴더에서 파일 이름을 가져오는 경우:

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)

다음을 사용할 수 있습니다.

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

비록 저는 이것을 직접적으로 얻을 수 있는 방법이 없다는 것이 놀랍지만,FileInfo(아니면 적어도 나는 볼 수 있습니다.

사용합니다.

또한 이 솔루션은 뒤에 쉼표를 추가하는 것을 방지합니다.

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

디렉터리가 싫습니다.이 시나리오에 대한 정보, 파일 정보입니다.

디렉터리정보 및 파일 정보는 폴더 및 파일에 대한 데이터를 필요 이상으로 많이 수집하므로 필요 이상으로 많은 시간과 메모리가 소요됩니다.

Path.GetFileNameWithoutExtension(file);

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

 Path.GetFileName(FileName);

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

사용하다Path.GetFileNameWithoutExtension경로가 시스템에 있습니다.IO 네임스페이스입니다.

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

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

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

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

추가 답변(또는 기존 답변에 대한 복합적인 답변)으로 디렉토리 내에서 이를 수행하기 위한 확장 방법을 작성할 수 있습니다.정보 클래스.다음은 디렉토리 이름이나 기타 수정 기준 등을 제공하기 위해 매우 빠르게 작성한 샘플입니다.

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("."))

이것을 시도해 보세요.

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

사용하기에 지저분해 보입니다.Path.GetFileNameWithoutExtension당신이 이미 가지고 있는 경우.FileInfo물건.

그래서 당신은 그 사실을 이용할 수도 있습니다.FileInfo.Extension의 일부입니다.FileInfo.Name간단한 문자열 작업을 수행하고 문자열의 끝을 제거합니다.

DirectoryInfo di = new DirectoryInfo(currentDirName);
FileInfo[] smFiles = di.GetFiles("*.txt");
foreach (FileInfo fi in smFiles)
{
    var name = fileInfo.Name.Remove(fileInfo.Name.Length - fileInfo.Extension.Length);
    builder.Append(name);
    builder.Append(", ");
    ...
}

참고로.

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제가 다른 답변 중 하나에서 본 것처럼.

다음은 그림 상자에 그림을 로드하고 확장 없이 텍스트 상자에 그림 이름을 표시하는 코드입니다.

private void browse_btn_Click(object sender, EventArgs e)
    {
        OpenFileDialog Open = new OpenFileDialog();
        Open.Filter = "image files|*.jpg;*.png;*.gif;*.icon;.*;";
        if (Open.ShowDialog() == DialogResult.OK)
        {
            imageLocation = Open.FileName.ToString();
            string picTureName = null;
            picTureName = Path.ChangeExtension(Path.GetFileName(imageLocation), null);

            pictureBox_Gift.ImageLocation = imageLocation;
            GiftName_txt.Text = picTureName.ToString();
            Savebtn.Enabled = true;
        }
    }

FileInfo에서 확장 메서드를 만들 수 있습니다.

public static partial class Extensions
{
    public static string NameWithoutExtension(this FileInfo fi) => Path.GetFileNameWithoutExtension(fi.Name);
}

원래 질문에 대한 답변:

new DirectoryInfo(dirPath).EnumerateFiles().Select(file => file.NameWithoutExtension());

특정 이름을 가진 모든 파일을 가져오려고 합니다.

new DirectoryInfo(dirPath).EnumerateFiles().Where(file => file.NameWithoutExtension() == fileName).FullName;
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

반응형