특정 폴더에서 파일 이름을 가져올 때 :
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
(또는 적어도 그것을 볼 수는 없다).
답변
답변
이 솔루션은 또한 후행 쉼표를 추가하지 못하게합니다.
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));
}
}
답변
FileInfo
자체 확장명을 알고 있으므로 제거 할 수 있습니다.
fileInfo.Name.Replace(fileInfo.Extension, "");
fileInfo.FullName.Replace(fileInfo.Extension, "");
또는 중간에 나타날 수있는 편집증이거나 미세 최적화를 원할 경우 :
file.Name.Substring(0, file.Name.Length - file.Extension.Length)