これは、特定のディレクトリ内のすべてのファイルを削除し、ディレクトリ構造を下に移動する再帰関数です。別の回答へのコメントに従って、特定の拡張子のファイルでのみ機能するようにパターン文字列を指定できます。
Action<string,string> fileDeleter = null;
fileDeleter = (directoryPath, pattern) =>
{
string[] files;
if (!string.IsNullOrEmpty(pattern))
files = Directory.GetFiles(directoryPath, pattern);
else
files = Directory.GetFiles(directoryPath);
foreach (string file in files)
{
File.Delete(file);
}
string[] directories = Directory.GetDirectories(directoryPath);
foreach (string dir in directories)
fileDeleter(dir, pattern);
};
string path = @"C:\some_folder\";
fileDeleter(path, "*.bmp");
それ以外の場合、ディレクトリはそのままになります。これは、複数の初期ディレクトリパスを処理するために、配列または文字列のリストで明らかに使用できます。
これは、標準関数として書き直された同じコードであり、パラメーターオプションとして再帰があります。
public void DeleteFilesFromDirectory(string directoryPath, string pattern, bool includeSubdirectories)
{
string[] files;
if (!string.IsNullOrEmpty(pattern))
files = Directory.GetFiles(directoryPath, pattern);
else
files = Directory.GetFiles(directoryPath);
foreach (string file in files)
{
File.Delete(file);
}
if (includeSubdirectories)
{
string[] directories = Directory.GetDirectories(directoryPath);
foreach (string dir in directories)
DeleteFilesFromDirectory(dir, pattern, includeSubdirectories);
}
}