C# 获取没有扩展名的文件名
获取特定文件夹中的文件名时:C# 获取没有扩展名的文件名,c#,.net,C#,.net,获取特定文件夹中的文件名时: 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.t
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
)您可以使用:
虽然我很惊讶没有办法直接从
FileInfo
(或者至少我看不到它)。使用。使用Path.GetFileNameWithoutExtension
。路径位于System.IO命名空间中。作为附加答案(或在现有答案的基础上进行复合),您可以在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>();
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.IO;
使用System.Linq;
使用系统文本;
命名空间DocumentDistributor.Library
{
公共静态类myExtensions
{
公共静态字符串[]GetFileNamesWithoutFileExtensions(此目录信息di)
{
FileInfo[]fi=di.GetFiles();
List returnValue=新列表();
对于(int i=0;i
编辑:我还认为,如果使用LINQ来实现阵列的构建,这种方法可能会被简化或简化,但我没有LINQ方面的经验,无法足够快地完成此类样本的构建
编辑2(大约4年后):以下是我将使用的LINQ-ified方法:
public static class myExtensions
{
public static IEnumerable<string> GetFileNamesWithoutExtensions(this DirectoryInfo di)
{
return di.GetFiles()
.Select(x => Path.GetFileNameWithoutExtension(x.FullName));
}
}
公共静态类myExtensions
{
公共静态IEnumerable GetFileNamesWithoutExtensions(此目录信息di)
{
返回di.GetFiles()
.Select(x=>Path.GetFileNameWithoutExtension(x.FullName));
}
}
此解决方案还防止添加尾随逗号
var filenames = String.Join(
", ",
Directory.GetFiles(@"c:\", "*.txt")
.Select(filename =>
Path.GetFileNameWithoutExtension(filename)));
我不喜欢这个场景中的DirectoryInfo和FileInfo
DirectoryInfo和FileInfo收集的有关文件夹和文件的数据比需要的多,因此它们占用的时间和内存比需要的多。仅用于记录:
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();
}
}
DirectoryInfo di = new DirectoryInfo(currentDirName);
FileInfo[] smFiles = di.GetFiles("*.txt");
string fileNames = String.Join(", ", smFiles.Select<FileInfo, string>(fi => Path.GetFileNameWithoutExtension(fi.FullName)));
DirectoryInfo di=newdirectoryinfo(currentdirename);
FileInfo[]smFiles=di.GetFiles(“*.txt”);
string fileNames=string.Join(“,”,smFiles.Select(fi=>Path.GetFileNameWithoutExtension(fi.FullName));
这样,您就不用使用StringBuilder
,而是使用String.Join()
。另外请注意,Path.GetFileNameWithoutExtension()
需要一个完整路径(fi.FullName
),而不是像我在另一个答案中看到的那样fi.Name
Path.GetFileNameWithoutExtension(file);
这将仅返回不带扩展名类型的文件名。您还可以更改它,以便同时获得文件名和类型
Path.GetFileName(FileName);
来源:
FileInfo
知道它自己的扩展名,所以您可以删除它
fileInfo.Name.Replace(fileInfo.Extension, "");
fileInfo.FullName.Replace(fileInfo.Extension, "");
或者如果你偏执,它可能出现在中间,或者想要微优化:
file.Name.Substring(0, file.Name.Length - file.Extension.Length)
如果文件名包含目录,并且您不需要丢失目录:
fileName.Remove(fileName.LastIndexOf("."))
试试这个
string FileNameAndExtension = "bılah bılah.pdf";
string FileName = FileNameAndExtension.Split('.')[0];
下面是我的代码,用于将图片加载到PictureBox中,并在文本框中显示图片名称,无需扩展名
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;
}
}
+1.如果我只想要文件名,我也喜欢
Directory.GetFiles
而不是DirectoryInfo.GetFiles
。我喜欢这个,因为String.Join,LINQ,没有StringBuilder。如果你看一下源代码。FileInfo的构造函数非常轻量级。您看到的所有信息都是通过属性完成的。他们只有在你打电话的时候才被收集起来them@fjch1997-构造函数调用Path.GetFileName并检查权限。所以这似乎有点多余。@erNodeWeard FileIOPermission不检查ACL的权限。相反,它是.NET中的某种机制,用于检查部分受信任代码的权限。所以,它不应该进行任何实际的IO调用。它对性能的影响有多大?我不能不测试就说。但我认为这并不是很好。你似乎不知道已经有一个框架类为你做了这件事。而且,如果有人将他们的文件命名为“Current.XLSFiles.xls”,这将导致真正的问题。@TomPadilla为什么会导致问题?因为这个方法将以“Current.files”作为文件名。因为“.xLS”的每一个实例都将被替换为“”,包括名称中间的一个。如果您使用的是一个空字符串,那么Juzzz非常方便,但是如果您已经有了一个FileInfo对象,那么就不需要麻烦使用Path。FileInfo已为此目的提供“Extension”属性。我收到错误“'builder'在当前上下文中不存在”。我添加了'system.Text',但仍然有相同的错误。原因是什么?@ffttyybuilder
将是OP代码中的一个实例。这只是GetFileName Withoutextension的一个示例用法-您可能会更好地编写自己的代码来调用它。这里需要注意的一个问题是,如果您的文件包含双扩展名,GetFileName Withoutextension
只会删除结束扩展名。例如,文件名example.es6.js
将变为example.es6
谢谢,最好的答案总是最短的答案。请注意,Path.GetFileNameWithoutExtension不是最好的方法,因为它会检查无效的路径字符,并尝试提取directoryseportorchar,AltDirectorySeparatorChar或VolumeSparatorChar在循环中,文件名(不是完整路径)似乎不需要它!
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;
}
}