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',但仍然有相同的错误。原因是什么?@ffttyy
builder
将是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;
        }
    }