我不認爲有比你的第一個想法更簡單的方法。 儘管如此,爲此使用正則表達式的優點是,您可以更好地控制使用正確的語法過濾文件。我只寫了一個小例子:
...
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 ...
不需要。'Path。*'方法是推薦的方法。 – DrKoch
我同意'Path.Get *'是推薦的方法。爲了完整起見,我會提到我還看到了諸如'path.Split('\\')。Last()'(用於獲取沒有目錄的文件名)或'filename.Split(' 。')First()'(將文件名稱提交到第一個點,即通常會刪除擴展名,但可能不止這些),但這些並不會成爲特別好的解決方案。 '遠離這些。 – stakx
你能修改你的命名策略嗎?由於類似這樣的原因,像文件(1).txt這樣的名稱與版本化文件名相比要好得多。 擴展名(最後一個字符串)在窗口中具有非常特殊的含義。沒有很好的理由,你不應該改變擴展名。 – DrKoch