获取没有扩展名的文件名

rem*_*rem 262 .net c#

获取某个文件夹中的文件名时:

DirectoryInfo di = new DirectoryInfo(currentDirName);
FileInfo[] smFiles = di.GetFiles("*.txt");
foreach (FileInfo fi in smFiles)
{
    builder.Append(fi.Name);
    builder.Append(", ");
    ...
}
Run Code Online (Sandbox Code Playgroud)

fi.Name让我与它的扩展名的文件名:file1.txt,file2.txt,file3.txt.

如何在没有扩展名的情况下获取文件名?(file1,file2,file3)

Rup*_*Rup 456

你可以使用Path.GetFileNameWithoutExtension:

foreach (FileInfo fi in smFiles)
{
    builder.Append(Path.GetFileNameWithoutExtension(fi.Name));
    builder.Append(", ");
}
Run Code Online (Sandbox Code Playgroud)

虽然我很惊讶没有办法直接从FileInfo(或至少我看不到它)得到这个.

  • 并获得扩展(例如稍后添加)使用:Path.GetExtension(fileName); (7认同)
  • 这里需要注意的是,如果你的文件包含双扩展名,`GetFileNameWithoutExtension`只删除**end**扩展名.例如,文件名`example.es6.js`将成为`example.es6` (6认同)
  • @Juzzz 如果您使用的是裸字符串,这很方便,但是如果您已经有了 FileInfo 对象,则无需理会 Path。FileInfo 已经为此提供了“扩展”属性。 (3认同)

Ern*_*rno 21

此解决方案还可以防止添加尾随逗号.

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

我不喜欢这种情况的DirectoryInfo,FileInfo.

DirectoryInfo和FileInfo收集有关文件夹和文件的更多数据,因此它们需要的时间和内存更多.

  • +1.如果我想要的只是文件名,我也会在任何一天更喜欢`Directory.GetFiles`而不是`DirectoryInfo.GetFiles`. (2认同)

Pra*_*eep 9

使用Path.GetFileNameWithoutExtension.Path位于System.IO命名空间中.


小智 8

Path.GetFileNameWithoutExtension(file);
Run Code Online (Sandbox Code Playgroud)

这仅返回文件名而没有扩展名类型。您也可以更改它,以便同时获得名称和文件类型

 Path.GetFileName(FileName);
Run Code Online (Sandbox Code Playgroud)

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


Joe*_*ton 6

作为一个额外的答案(或复合现有答案),您可以编写一个扩展方法来在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>();
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我也认为如果使用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));
    }
}
Run Code Online (Sandbox Code Playgroud)


drz*_*aus 6

FileInfo 知道它自己的扩展名,所以你可以删除它

fileInfo.Name.Replace(fileInfo.Extension, "");
fileInfo.FullName.Replace(fileInfo.Extension, "");
Run Code Online (Sandbox Code Playgroud)

或者如果您偏执它可能会出现在中间,或者想要进行微优化:

file.Name.Substring(0, file.Name.Length - file.Extension.Length)
Run Code Online (Sandbox Code Playgroud)


Omi*_*-RH 5

如果文件名包含目录并且您不需要丢失目录:

fileName.Remove(fileName.LastIndexOf("."))
Run Code Online (Sandbox Code Playgroud)