ディレクトリをチェックして、ファイル名に特定のキーワードが含まれるファイルがあるかどうかを確認し、存在する場合は削除する必要があります。これは可能ですか?
たとえば、「C:\Folder
」内のファイル名にキーワード「Apple」を含む既存のファイルをすべて削除します。
ヘンクの答えを拡張するには、次のものが必要です。
string rootFolderPath = @"C:\\SomeFolder\\AnotherFolder\\FolderCOntainingThingsToDelete";
string filesToDelete = @"*DeleteMe*.doc"; // Only delete DOC files containing "DeleteMe" in their filenames
string[] fileList = System.IO.Directory.GetFiles(rootFolderPath, filesToDelete);
foreach(string file in fileList)
{
System.Diagnostics.Debug.WriteLine(file + "will be deleted");
// System.IO.File.Delete(file);
}
非常に注意してください!
削除コマンドをコメントアウトしていることに注意してください。実際に何かを削除する前に、それを実行してテストを注意深くしてください!
ルートフォルダーのすべてのサブフォルダーにあるファイルを再帰的に削除する場合は、System.IO.SearchOption.AllDirectories);を追加します。 GetFiles呼び出しに追加します。
これを行う場合、rootFolderPathが約4文字未満の場合に実行を拒否することもvery良いアイデアです(C:\のすべてを削除しないための単純な保護-私はそこにいて、それを行って、それは楽しいではありません!!!)
System.IO.Directory.GetFiles()
を使用して、string []形式のファイルのリストを作成できます。
次に、System.IO.File.ReadAllText()
を使用してファイル全体を読み取るか、ファイルが非常に大きい場合は、System.IO.File.OpenText()
を使用してTextReaderを開きます。
リテラルキーワードを探している場合は、String.Contains()
で十分です。
ファイルの削除はSystem.IO.File.Delete()
で行うことができます。ファイルが再び閉じていることを確認してください。
編集、GetFiles()
の2つの例:
string[] fileNames = System.IO.Directory.GetFiles(@"C:\");
string[] fileNames = System.IO.Directory.GetFiles(@"C:\", @"*.sys");
new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => {
if (file.IndexOf("Apple", StringComparison.OrdinalIgnoreCase) >= 0)
File.Delete(file);
});
または
new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => {
Regex re = new Regex("Apple", RegexOptions.IgnoreCase);
if (re.IsMatch(file))
File.Delete(file);
});
多かれ少なかれ、これ:
string DeleteThis = "Apple";
string[] Files = Directory.GetFiles(@"C:\Folder");
foreach (string file in Files)
{
if (file.ToUpper().Contains(DeleteThis.ToUpper()))
{
File.Delete(file);
}
}
new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => { if (file.ToUpper().Contains("Apple".ToUpper())) File.Delete(file); });