我们这里的一个工具维护文件的格式如 - file.txt.1。 最后1是始终的数值,并且在每个文件保存时增加,因此文件系统有多个文件。
现在在另一个C#应用程序中,我想处理这些文件名。在这里我想分割basename和扩展名。
我使用了Path.GetFilenameWithoutExtension()
和Path.GetExtension()
。在这种情况下,它们将分别返回file.txt和.1。
这迫使我运行另一轮调用来获取没有扩展名和文件扩展名的文件名。
有基本名称和扩展名的简单/智能方法吗?
答案 0 :(得分:1)
我认为没有比你的第一个想法更简单的方法。 尽管如此,使用正则表达式的优点是,您可以更好地控制使用正确的语法过滤掉文件。我刚写了一个小样本:
...
using System.IO;
using System.Text.RegularExpressions;
...
string path = @"C:\temp";
Regex numExtRegex = new Regex(@"^(.*)\.(\d+)$");
foreach (string file in Directory.GetFiles(path))
{
Match match = numExtRegex.Match(file);
if (match.Success)
{
string originalFile = match.Groups[1].Value;
string numericExtension = match.Groups[2].Value;
string originalFileNameWithoutExtension = Path.GetFileNameWithoutExtension(originalFile);
string extension = Path.GetExtension(originalFile);
Console.WriteLine("File: {0}, numeric extension: {1}, file name w/o ext: {2}, ext: {3}",
originalFile, numericExtension, originalFileNameWithoutExtension, extension);
}
}
正则表达式查找something.digits
使用这种过滤方式,您可以确定不会处理,例如一个人放在目录中的readme.txt ......