확장명 없이 파일 이름 가져오기
특정 폴더에서 파일 이름을 가져오는 경우:
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
'programing' 카테고리의 다른 글
Angular2의 Blur 이벤트에서 사용하는 방법은 무엇입니까? (0) | 2023.05.16 |
---|---|
sqlalchemy.ex.해당 모듈 오류 없음:플러그인을 로드할 수 없습니다. sqlalchemy.dialects:postgres (0) | 2023.05.11 |
Postgre에 대한 원격 액세스를 허용하는 방법SQL 데이터베이스 (0) | 2023.05.11 |
클래스 기반 보기 VS 기능 기반 보기 (0) | 2023.05.11 |
다중 행 문자열에서 지정한 열을 쉼표로 구분된 단일 행으로 변환 (0) | 2023.05.11 |