दिलचस्प पोस्ट
जावा एक स्ट्रिंग में एक बार में (या सबसे प्रभावी तरीके से) में एक से अधिक भिन्न ऑब्जेक्ट को बदलता है बाहरी वीएस2013 बिल्ड त्रुटि "त्रुटि MSB4019: आयातित प्रोजेक्ट <पथ> नहीं मिला" एक बैच लिपि में कैसे इंतजार करें? स्थानीय आईपी पता node.js में प्राप्त करें मैं जावास्क्रिप्ट बीप कैसे कर सकता हूं? Xcode 6 अजीब बग: इंटरफ़ेस बिल्डर फ़ाइल में अज्ञात वर्ग पायथन में वर्तमान मॉड्यूल के भीतर मैं सभी वर्गों की एक सूची कैसे प्राप्त करूं? यह क्यों असंभव है कि आईओ के प्रयास किए बिना, यह पता लगाने के लिए कि टीसीपी सॉकेट को सहकर्मी ने शानदार ढंग से बंद कर दिया था? एजेक्स में 302 रीडायरेक्ट को संभाल नहीं सकते हैं और क्यों? विंडोज संस्करण में नेट का पता लगाएं गतिशील रूप से एक ExpandoObject में गुण जोड़ना क्या उत्पाद समीक्षाओं को प्राप्त करने के लिए एक Amazon.com API है? FancyBox का उपयोग करते हुए HTML विशेषता rel त्रुटियाँ कोणीय 2.0 राउटर ब्राउज़र को पुनः लोड करने पर काम नहीं कर रहा है धागा में थ्रेड स्टार्ट विधि के लिए पैरामीटर कैसे पारित करें?

निर्देशिका में सभी फ़ाइलों और फ़ोल्डरों को कैसे हटाएं?

सी # का उपयोग कर, मैं एक निर्देशिका से सभी फाइलों और फ़ोल्डरों को कैसे हटा सकता हूं, लेकिन फिर भी रूट निर्देशिका को कैसे रख सकता हूं?

वेब के समाधान से एकत्रित समाधान "निर्देशिका में सभी फ़ाइलों और फ़ोल्डरों को कैसे हटाएं?"

System.IO.DirectoryInfo di = new DirectoryInfo("YourPath"); foreach (FileInfo file in di.GetFiles()) { file.Delete(); } foreach (DirectoryInfo dir in di.GetDirectories()) { dir.Delete(true); } 

हां, यह ऐसा करने का सही तरीका है यदि आप खुद को "क्लीन" (या, जैसा मैं इसे कॉल करना चाहता हूँ, "रिक्त" फ़ंक्शन) देना चाहता हूं, तो आप एक एक्सटेंशन विधि बना सकते हैं।

 public static void Empty(this System.IO.DirectoryInfo directory) { foreach(System.IO.FileInfo file in directory.GetFiles()) file.Delete(); foreach(System.IO.DirectoryInfo subDirectory in directory.GetDirectories()) subDirectory.Delete(true); } 

यह तब आपको कुछ करने की अनुमति देगा ..

 System.IO.DirectoryInfo directory = new System.IO.DirectoryInfo(@"C:\..."); directory.Empty(); 

निम्न कोड को रिकर्सिव फ़ोल्डर को साफ़ कर दिया जाएगा:

 private void clearFolder(string FolderName) { DirectoryInfo dir = new DirectoryInfo(FolderName); foreach(FileInfo fi in dir.GetFiles()) { fi.Delete(); } foreach (DirectoryInfo di in dir.GetDirectories()) { clearFolder(di.FullName); di.Delete(); } } 

हम भी LINQ के लिए प्यार दिखा सकते हैं:

 using System.IO; using System.Linq; … var directory = Directory.GetParent(TestContext.TestDir); directory.EnumerateFiles() .ToList().ForEach(f => f.Delete()); directory.EnumerateDirectories() .ToList().ForEach(d => d.Delete(true)); 

ध्यान दें कि यहां मेरा समाधान Get*().ToList().ForEach(...) नहीं है, क्योंकि मैं Get*().ToList().ForEach(...) का उपयोग कर रहा हूं Get*().ToList().ForEach(...) जो समान IEnumerable दो बार उत्पन्न करता है मैं इस समस्या से बचने के लिए एक एक्सटेंशन विधि का उपयोग करता हूं:

 using System.IO; using System.Linq; … var directory = Directory.GetParent(TestContext.TestDir); directory.EnumerateFiles() .ForEachInEnumerable(f => f.Delete()); directory.EnumerateDirectories() .ForEachInEnumerable(d => d.Delete(true)); 

यह एक्सटेंशन विधि है:

 /// <summary> /// Extensions for <see cref="System.Collections.Generic.IEnumerable"/>. /// </summary> public static class IEnumerableOfTExtensions { /// <summary> /// Performs the <see cref="System.Action"/> /// on each item in the enumerable object. /// </summary> /// <typeparam name="TEnumerable">The type of the enumerable.</typeparam> /// <param name="enumerable">The enumerable.</param> /// <param name="action">The action.</param> /// <remarks> /// “I am philosophically opposed to providing such a method, for two reasons. /// …The first reason is that doing so violates the functional programming principles /// that all the other sequence operators are based upon. Clearly the sole purpose of a call /// to this method is to cause side effects.” /// —Eric Lippert, “foreach” vs “ForEach” [http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx] /// </remarks> public static void ForEachInEnumerable<TEnumerable>(this IEnumerable<TEnumerable> enumerable, Action<TEnumerable> action) { foreach (var item in enumerable) { action(item); } } } 
  new System.IO.DirectoryInfo(@"C:\Temp").Delete(true); //Or System.IO.Directory.Delete(@"C:\Temp", true); 

सरल तरीका:

 Directory.Delete(path,true); Directory.CreateDirectory(path); 

ध्यान रखें कि यह फ़ोल्डर पर कुछ अनुमतियों को मिटा सकता है

Hiteshbiblog के आधार पर, आपको शायद यह सुनिश्चित करना चाहिए कि फाइल पढ़ी गई है

 private void ClearFolder(string FolderName) { DirectoryInfo dir = new DirectoryInfo(FolderName); foreach (FileInfo fi in dir.GetFiles()) { fi.IsReadOnly = false; fi.Delete(); } foreach (DirectoryInfo di in dir.GetDirectories()) { ClearFolder(di.FullName); di.Delete(); } } 
 System.IO.Directory.Delete(installPath, true); System.IO.Directory.CreateDirectory(installPath); 

हर विधि जो मैंने कोशिश की, वे सिस्टम.IO त्रुटियों के साथ कुछ बिंदु पर विफल रहे हैं। निम्नलिखित विधि सुनिश्चित करने के लिए काम करती है, भले ही फ़ोल्डर रिक्त है या नहीं, केवल पढ़ने के लिए या नहीं, आदि।

 ProcessStartInfo Info = new ProcessStartInfo(); Info.Arguments = "/C rd /s /q \"C:\\MyFolder""; Info.WindowStyle = ProcessWindowStyle.Hidden; Info.CreateNoWindow = true; Info.FileName = "cmd.exe"; Process.Start(Info); 

विंडोज 7 में, अगर आपने इसे विंडोज एक्सप्लोरर के साथ मैन्युअल रूप से बनाया है, तो डायरेक्टरी संरचना इस एक जैसा है:

 C: \AAA \BBB \CCC \DDD 

और डायरेक्टरी सी: \ एएए को साफ करने के लिए मूल कोड में सुझाए गए कोड को चलाना, di.Delete(true) को हटाने की कोशिश करते समय लाइन di.Delete(true) हमेशा IOException के साथ विफल रहता है "निर्देशिका खाली नहीं है" शायद विंडोज एक्सप्लोरर में किसी तरह की देरी / कैशिंग की वजह यह हो सकती है।

निम्नलिखित कोड मेरे लिए विश्वसनीय तरीके से काम करता है:

 static void Main(string[] args) { DirectoryInfo di = new DirectoryInfo(@"c:\aaa"); CleanDirectory(di); } private static void CleanDirectory(DirectoryInfo di) { if (di == null) return; foreach (FileSystemInfo fsEntry in di.GetFileSystemInfos()) { CleanDirectory(fsEntry as DirectoryInfo); fsEntry.Delete(); } WaitForDirectoryToBecomeEmpty(di); } private static void WaitForDirectoryToBecomeEmpty(DirectoryInfo di) { for (int i = 0; i < 5; i++) { if (di.GetFileSystemInfos().Length == 0) return; Console.WriteLine(di.FullName + i); Thread.Sleep(50 * i); } } 

निम्न कोड निर्देशिका को साफ करेगा, लेकिन वहां रूट निर्देशिका को छोड़ दें (रिकर्सिव)।

 Action<string> DelPath = null; DelPath = p => { Directory.EnumerateFiles(p).ToList().ForEach(File.Delete); Directory.EnumerateDirectories(p).ToList().ForEach(DelPath); Directory.EnumerateDirectories(p).ToList().ForEach(Directory.Delete); }; DelPath(path); 

FileInfo और DirectoryInfo के बजाय फ़ाइल और डायरेक्टरी के साथ केवल स्थिर विधियों का उपयोग करना तेजी से कार्य करेगा। ( सी # में फ़ाइल और फ़ाइल इन्फाइन के बीच अंतर क्या है? उपयोगिता पद्धति के रूप में दिखाए गए उत्तर।

 public static void Empty(string directory) { foreach(string fileToDelete in System.IO.Directory.GetFiles(directory)) { System.IO.File.Delete(fileToDelete); } foreach(string subDirectoryToDeleteToDelete in System.IO.Directory.GetDirectories(directory)) { System.IO.Directory.Delete(subDirectoryToDeleteToDelete, true); } } 
 string directoryPath = "C:\Temp"; Directory.GetFiles(directoryPath).ToList().ForEach(File.Delete); Directory.GetDirectories(directoryPath).ToList().ForEach(Directory.Delete); 

यह संस्करण रिकर्सिव कॉल का उपयोग नहीं करता, और केवल पढ़ने योग्य समस्या का हल करता है।

 public static void EmptyDirectory(string directory) { // First delete all the files, making sure they are not readonly var stackA = new Stack<DirectoryInfo>(); stackA.Push(new DirectoryInfo(directory)); var stackB = new Stack<DirectoryInfo>(); while (stackA.Any()) { var dir = stackA.Pop(); foreach (var file in dir.GetFiles()) { file.IsReadOnly = false; file.Delete(); } foreach (var subDir in dir.GetDirectories()) { stackA.Push(subDir); stackB.Push(subDir); } } // Then delete the sub directories depth first while (stackB.Any()) { stackB.Pop().Delete(); } } 

DirectoryInfo का GetDirectories विधि का उपयोग करें

 foreach (DirectoryInfo subDir in new DirectoryInfo(targetDir).GetDirectories()) subDir.Delete(true); 

यह ऊपर के मुद्दे से निपटने का सबसे अच्छा तरीका नहीं है लेकिन यह एक वैकल्पिक विकल्प है …

 while (Directory.GetDirectories(dirpath).Length > 0) { //Delete all files in directory while (Directory.GetFiles(Directory.GetDirectories(dirpath)[0]).Length > 0) { File.Delete(Directory.GetFiles(dirpath)[0]); } Directory.Delete(Directory.GetDirectories(dirpath)[0]); } 
 private void ClearFolder(string FolderName) { DirectoryInfo dir = new DirectoryInfo(FolderName); foreach (FileInfo fi in dir.GetFiles()) { fi.IsReadOnly = false; fi.Delete(); } foreach (DirectoryInfo di in dir.GetDirectories()) { ClearFolder(di.FullName); di.Delete(); } } 
 DirectoryInfo Folder = new DirectoryInfo(Server.MapPath(path)); if (Folder .Exists) { foreach (FileInfo fl in Folder .GetFiles()) { fl.Delete(); } Folder .Delete(); } 
 using System; using System.IO; namespace DeleteFoldersAndFilesInDirectory { class Program { public static void DeleteAll(string path) { string[] directories = Directory.GetDirectories(path); string[] files = Directory.GetFiles(path); foreach (string x in directories) Directory.Delete(x, true); foreach (string x in files) File.Delete(x); } static void Main() { Console.WriteLine("Enter The Directory:"); string directory = Console.ReadLine(); Console.WriteLine("Deleting all files and directories ..."); DeleteAll(directory); Console.WriteLine("Deleted"); } } } 

यह दिखाएगा कि हम कैसे फ़ोल्डर को हटाते हैं और इसके लिए जांचें हम टेक्स्ट बॉक्स का उपयोग करते हैं

 using System.IO; namespace delete_the_folder { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Deletebt_Click(object sender, EventArgs e) { //the first you should write the folder place if (Pathfolder.Text=="") { MessageBox.Show("ples write the path of the folder"); Pathfolder.Select(); //return; } FileAttributes attr = File.GetAttributes(@Pathfolder.Text); if (attr.HasFlag(FileAttributes.Directory)) MessageBox.Show("Its a directory"); else MessageBox.Show("Its a file"); string path = Pathfolder.Text; FileInfo myfileinf = new FileInfo(path); myfileinf.Delete(); } } } 
 using System.IO; string[] filePaths = Directory.GetFiles(@"c:\MyDir\"); foreach (string filePath in filePaths) File.Delete(filePath); 

मुख्य से कॉल करें

 static void Main(string[] args) { string Filepathe =<Your path> DeleteDirectory(System.IO.Directory.GetParent(Filepathe).FullName); } 

इस विधि को जोड़ें

 public static void DeleteDirectory(string path) { if (Directory.Exists(path)) { //Delete all files from the Directory foreach (string file in Directory.GetFiles(path)) { File.Delete(file); } //Delete all child Directories foreach (string directory in Directory.GetDirectories(path)) { DeleteDirectory(directory); } //Delete a Directory Directory.Delete(path); } } 
  foreach (string file in System.IO.Directory.GetFiles(path)) { System.IO.File.Delete(file); } foreach (string subDirectory in System.IO.Directory.GetDirectories(path)) { System.IO.Directory.Delete(subDirectory,true); } 

फ़ोल्डर को हटाने के लिए, यह पाठ बॉक्स और using System.IO; बटन using System.IO; कर कोड है using System.IO; :

 private void Deletebt_Click(object sender, EventArgs e) { System.IO.DirectoryInfo myDirInfo = new DirectoryInfo(@"" + delete.Text); foreach (FileInfo file in myDirInfo.GetFiles()) { file.Delete(); } foreach (DirectoryInfo dir in myDirInfo.GetDirectories()) { dir.Delete(true); } } 

निम्न उदाहरण दिखाता है कि आप ऐसा कैसे कर सकते हैं। यह पहले कुछ निर्देशिकाओं और एक फ़ाइल बनाता है और फिर उन्हें Directory.Delete(topPath, true); माध्यम से हटा देता है Directory.Delete(topPath, true); :

  static void Main(string[] args) { string topPath = @"C:\NewDirectory"; string subPath = @"C:\NewDirectory\NewSubDirectory"; try { Directory.CreateDirectory(subPath); using (StreamWriter writer = File.CreateText(subPath + @"\example.txt")) { writer.WriteLine("content added"); } Directory.Delete(topPath, true); bool directoryExists = Directory.Exists(topPath); Console.WriteLine("top-level directory exists: " + directoryExists); } catch (Exception e) { Console.WriteLine("The process failed: {0}", e.Message); } } 

यह https://msdn.microsoft.com/en-us/library/fxeahc5f(v=vs.110).aspx से लिया गया है।

 private void ClearDirectory(string path) { if (Directory.Exists(path))//if folder exists { Directory.Delete(path, true);//recursive delete (all subdirs, files) } Directory.CreateDirectory(path);//creates empty directory } 

केवल एक चीज जो आपको करना चाहिए, वह है कि True को optional recursive parameter सेट करना

Directory.Delete("C:\MyDummyDirectory", True)

NET के लिए धन्यवाद। 🙂

 IO.Directory.Delete(HttpContext.Current.Server.MapPath(path), True) 

आपको उस से अधिक की जरूरत नहीं है