私がやりたいのは、特定のフォルダー内のすべてのファイルの名前を変更して、ファイル名に数字が含まれている場合にそのファイルが削除されるようにすることです。
たとえば、ファイル名が
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:その正規表現について、私は数字の正規表現に関する質問を投稿しましたか?(どうやら私は十分に明確ではありませんでした)そしてそれから私は私の正規表現を手に入れました、あなたが他の正規表現がもっとうまくいくと思うなら私に教えてください、そしてあなたが他の情報を必要とするなら私に知らせてください...