从文件名字符串中删除文件扩展名

twe*_*ypi 182 c# string parsing

如果我有一个字符串说"abc.txt",有一个快速的方法来获得一个子串"abc"吗?

我不能这样做,fileName.IndexOf('.')因为文件名可能是"abc.123.txt"什么,我显然只是想摆脱扩展(即"abc.123").

R. *_*des 344

Path.GetFileNameWithoutExtension方法为您提供了作为参数传递的文件名而没有扩展名,从名称中可以明显看出.

  • 保留路径不是预期的效果,请注意方法名称是GetFileNameWithoutExtension.如果承诺保留路径,那么方法名称应该是不同的.方法描述也非常具体,只返回没有扩展名的文件名.OP没有指明他需要路径.恰恰相反. (4认同)
  • @dukevin 这个问题与路径无关。它只是要求从*文件名*中删除扩展名。 (2认同)

Ran*_*UAN 230

框架中有一个方法用于此目的,它将保留除扩展之外的完整路径.

System.IO.Path.ChangeExtension(path, null);
Run Code Online (Sandbox Code Playgroud)

如果只需要文件名,请使用

System.IO.Path.GetFileNameWithoutExtension(path);
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案.接受的答案剥离文件路径 (36认同)
  • null在这里具有神奇的价值。如果您使用`String.Empty`又名“”“`,则会留下一个尾随[[..]]点。 (7认同)
  • 这是一个更好的答案,因为它保留了路径 (6认同)

phd*_*ign 54

您可以使用

string extension = System.IO.Path.GetExtension(filename);
Run Code Online (Sandbox Code Playgroud)

然后手动删除扩展程序:

string result = filename.Substring(0, filename.Length - extension.Length);
Run Code Online (Sandbox Code Playgroud)


小智 27

String.LastIndexOf会起作用.

string fileName= "abc.123.txt";
int fileExtPos = fileName.LastIndexOf(".");
if (fileExtPos >= 0 )
 fileName= fileName.Substring(0, fileExtPos);
Run Code Online (Sandbox Code Playgroud)

  • 注意没有扩展名的文件,比如`foo/bar.cat/cheese`! (10认同)

Log*_*man 12

如果你想创建没有扩展名的完整路径,你可以这样做:

Path.Combine( Path.GetDirectoryName(fullPath), Path.GetFileNameWithoutExtension(fullPath))
Run Code Online (Sandbox Code Playgroud)

但我正在寻找更简单的方法来做到这一点.有谁有想法吗?


小智 6

我用下面的代码

string fileName = "C:\file.docx";
MessageBox.Show(Path.Combine(Path.GetDirectoryName(fileName),Path.GetFileNameWithoutExtension(fileName)));
Run Code Online (Sandbox Code Playgroud)

输出将是

C:\文件

  • 使用`Path.Combine()`而不是指定`“ \\”`。 (4认同)
  • 还有,如果我的目录分隔符是'/';)? (2认同)