حذف الملفات من الدليل إذا كان اسم الملف يحتوي على كلمة معينة

StackOverflow https://stackoverflow.com/questions/1620366

  •  06-07-2019
  •  | 
  •  

سؤال

أنا بحاجة إلى التحقق من دليل لمعرفة ما إذا كان هناك أية ملفات اسم الملف الذي يحتوي على كلمة معينة و إذا كان هناك ، وحذفها.هل هذا ممكن ؟

على سبيل المثال حذف جميع الملفات الموجودة في "C:\Folder"اسم الملف الذي يحتوي على الكلمة "أبل".

هل كانت مفيدة؟

المحلول

إلى التوسع في هينك رد عليك:

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);
}

كن حذرا جدا!

علما بأنني قد علق بها الأمر حذف.تشغيل واختباره بعناية قبل السماح لها في الواقع حذف أي شيء!

إذا كنت ترغب في حذف الملفات بشكل متكرر في جميع المجلدات الفرعية من المجلد الجذر ، إضافة النظام.IO.SearchOption.AllDirectories);إلى GetFiles الاتصال.

إذا كنت تفعل هذا أيضا جدا فكرة جيدة أن يرفض تشغيل إذا كان rootFolderPath هو أقل من 4 أحرف (أ حماية بسيطة ضد حذف كل شيء في C:\ - لقد كنت هناك و فعلت ذلك و انها ليست متعة!!!)

نصائح أخرى

ويمكنك استخدام System.IO.Directory.GetFiles() إلى قائمة الملفات، في سلسلة [] شكل.

<الإضراب> ثم يمكنك استخدام 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");
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); });
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top