我想要做的是重命名特定文件夹中的所有文件,这样如果文件名中包含任何数字,它将被删除。
比如说,如果文件名
someFileName.someExtension
保持不变,但如果文件是这样的,
03 - Rocketman Elton John
它应该重命名为Rocketman Elton John
(我做了删除 的部分-
),另一个例子,如果文件名是15-Trey Songz - Unfortunate (Prod. by Noah 40 Shebib)
它应该重命名为Trey Songz Unfortunate (Prod. by Noah Shebib)
(我可以再次删除-
)。要求用户选择这样的文件夹
private void txtFolder_MouseDown(object sender, MouseEventArgs e)
{
FolderBrowserDialog fd = new FolderBrowserDialog();
fd.RootFolder = Environment.SpecialFolder.Desktop;
fd.ShowNewFolderButton = true;
if (fd.ShowDialog() == DialogResult.OK)
{
txtFolder.Text = fd.SelectedPath;
}
}
此外,它的重命名是这样开始的
private void btnGo_Click(object sender, EventArgs e)
{
StartRenaming(txtFolder.Text);
}
和
private void StartRenaming(string FolderName)
{
string[] files = Directory.GetFiles(FolderName);
foreach (string file in files)
RenameFile(file);
}
现在在重命名文件中,我需要函数,即删除文件中任何数字的正则表达式。它被实现为
private void RenameFile(string FileName)
{
string fileName = Path.GetFileNameWithoutExtension(FileName);
/* here the function goes that will find numbers in filename using regular experssion and replace them */
}
所以我能做的是,我可以使用类似的东西
1 var matches = Regex.Matches(fileName, @"\d+");
2
3 if (matches.Count == 0)
4 return null;
5
6 // start the loop
7 foreach(var match in matches)
8 {
9 fileName = fileName.Replace(match, ""); /* or fileName.Replace(match.ToString(), ""), whatever be the case */
10 }
11 File.Move(FileName, Path.Combine(Path.GetDirectoryName(FileName), fileName));
12 return;
但我认为这不是正确的做法吗?有没有更好的选择来做到这一点?或者这是最好的(也是唯一的选择)吗?IN
另外, String.Replace中有什么类似的东西吗?在 sql 中说,我可以IN
在 select 命令中使用并指定一堆 where 条件,但是 String.Replace 是否有类似的东西,这样我就不必运行从第 7 行到第 10 行运行的循环?还有其他更好的选择吗?
ps:关于那个正则表达式,我发布了一个问题正则表达式的数字?(显然我不够清楚),从中我得到了我的正则表达式,如果你认为其他正则表达式会做得更好,请告诉我,如果你需要任何其他信息,请告诉我......