29

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

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

4

5 に答える 5

59

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

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文字未満の場合は実行を拒否することも非常に良い考えです(C:\のすべてを削除することに対する単純な保護-私はそこに行ってそれを実行しましたが、楽しくありません! !!)

于 2009-10-25T08:54:44.673 に答える
8

System.IO.Directory.GetFiles()string[] 形式のファイルのリストに使用できます。

次に、 を使用System.IO.File.ReadAllText()して完全なファイルを読み取るか、ファイルが非常に大きい場合は で TextReader を開きSystem.IO.File.OpenText()ます。

リテラル キーワードを探している場合は、それだけでString.Contains()十分です。

ファイルの削除はSystem.IO.File.Delete(). ファイルが再度閉じられていることを確認してください。

編集、2つの例GetFiles()

string[] fileNames = System.IO.Directory.GetFiles(@"C:\");
string[] fileNames = System.IO.Directory.GetFiles(@"C:\", @"*.sys");
于 2009-10-25T08:36:46.380 に答える
7
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);
});
于 2011-11-23T16:33:45.283 に答える
5

多かれ少なかれ、これ:

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

foreach (string file in Files)
{
    if (file.ToUpper().Contains(DeleteThis.ToUpper()))
    {
        File.Delete(file);
    }
}
于 2009-10-25T08:58:06.570 に答える