2009-10-25 8 views
19

है, तो मुझे यह देखने के लिए एक निर्देशिका जांचनी होगी कि क्या कोई फ़ाइल है जिसका फ़ाइल नाम एक विशिष्ट कीवर्ड है और यदि वहां है, तो उन्हें हटाने के लिए। क्या यह संभव है?फ़ाइल नाम से निर्देशिका हटाएं यदि फ़ाइल नाम में एक निश्चित शब्द

उदाहरण के लिए, "C:\Folder" में मौजूद सभी मौजूदा फ़ाइलों को हटाएं जिनके फ़ाइल नाम में "ऐप्पल" कीवर्ड है।

उत्तर

44

हेंक के जवाब पर विस्तार करने के लिए, आप की जरूरत:

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 वर्ण से कम है को चलाने के लिए मना करने के लिए (सी में सब कुछ को हटाने के खिलाफ एक सरल संरक्षण: \ - मैं वहाँ और किया गया है कि और यह मजेदार नहीं है !!!)

+2

और ऐसी स्थितियों को संभालने के लिए अपवादों को पकड़ना न भूलें, जहां फ़ाइल उपयोग में है, या पहुंच अस्वीकार कर दी गई है, आदि – Bryan

+1

हाँ, मैंने पाठक के लिए एक अभ्यास के रूप में छोड़ा ;-) –

+0

धन्यवाद। पकड़ अपवाद भी जोड़ा गया। – user

8

आप स्ट्रिंग [] प्रारूप में फ़ाइलों की सूची में System.IO.Directory.GetFiles() का उपयोग कर सकते हैं।

तो फिर तुम 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"); 
+0

ओह, अनुमान है कि मुझे इसे थोड़ा अलग करना चाहिए था। मुझे फ़ाइल में ही जांच करने की आवश्यकता नहीं है, बल्कि फाइल का नाम। – user

+0

फिर आप ReadAllText/TextReader चरणों को छोड़ सकते हैं। –

+0

सभी पाठ पढ़ने की कोई आवश्यकता नहीं है। जैसे अगर फ़ाइल ऐप्पल के साथ शुरू होती है और यह 50 एमबी है ... स्लाइड विंडो के साथ अनुक्रमिक रूप से फ़ाइलों को पढ़ने का बेहतर तरीका है। –

5

कमोबेश, इस:

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

foreach (string file in Files) 
{ 
    if (file.ToUpper().Contains(DeleteThis.ToUpper())) 
    { 
     File.Delete(file); 
    } 
} 
0
new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => { if (file.ToUpper().Contains("apple".ToUpper())) File.Delete(file); }); 
4
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); 
}); 
संबंधित मुद्दे