最近、6 つのディレクトリにある一連のファイルの名前を変更する小さなプログラムを作成しました。プログラムは、リストから各ディレクトリをループし、File.Move メソッドを使用してそのディレクトリ内の各ファイルの名前を変更します。ファイルの名前は、毎回 1 が 1 ずつ増加して、cart_buttons_1.png に変更されます。
public static int RenameFiles(DirectoryInfo d, StreamWriter sqlStreamWriter,
int incrementer, int category, int size)
{
FileInfo[] files = d.GetFiles("*.png");
foreach (FileInfo fileInfo in files)
{
File.Move(fileInfo.FullName, d.FullName + "cart_button_" + incrementer + ".png" );
incrementer++;
}
return incrementer;
}
私が遭遇している問題は、プログラムを複数回実行すると、100 番目のレコードを含むフォルダーに到達するまで正常に実行されることです。d.Getfiles メソッドは、名前を変更しようとしているファイルが既にフォルダーに存在するため、最初に 100 番台のすべてのファイルを取得し、IOException を引き起こします。これに対して私が見つけた回避策は、ファイル名に 100 を含むすべてのレコードを選択し、それらの名前をすべて「z」などに変更して、それらをすべてまとめてバッチ処理することです。これを修正する方法についての考えやアイデア。おそらく、GetFiles を並べ替えて、他のものを最初に確認する方法です。