web-dev-qa-db-ja.com

ファイル名に特定の単語が含まれている場合、ディレクトリからファイルを削除します

ディレクトリをチェックして、ファイル名に特定のキーワードが含まれるファイルがあるかどうかを確認し、存在する場合は削除する必要があります。これは可能ですか?

たとえば、「C:\Folder」内のファイル名にキーワード「Apple」を含む既存のファイルをすべて削除します。

24
user

ヘンクの答えを拡張するには、次のものが必要です。

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:\のすべてを削除しないための単純な保護-私はそこにいて、それを行って、それは楽しいではありません!!!)

52
Jason Williams

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");
8
Henk Holterman
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);
});
6
Keith

多かれ少なかれ、これ:

string DeleteThis = "Apple";
string[] Files = Directory.GetFiles(@"C:\Folder");

foreach (string file in Files)
{
    if (file.ToUpper().Contains(DeleteThis.ToUpper()))
    {
        File.Delete(file);
    }
}
5
Kyle Rozendo
new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => { if (file.ToUpper().Contains("Apple".ToUpper())) File.Delete(file); });
0
Antony Koch