ডিরেক্টরিতে সমস্ত ফাইল এবং ফোল্ডার কীভাবে মুছবেন?


662

সি # ব্যবহার করে, আমি কীভাবে কোনও ডিরেক্টরি থেকে সমস্ত ফাইল এবং ফোল্ডার মুছতে পারি, তবে তারপরেও রুট ডিরেক্টরিটি রাখতে পারি?


11
ডাইরেক্টরিআইএনফো-তে একটি পদ্ধতি থাকলে .Clean () ভাল কি হবে!
জেএল।

6
অথবা .ডিলেটফোল্ডার এবং মুছে ফেলা পদ্ধতি।
জেএল।

18
আপনি সচেতন হতে চান যে কোনও ফাইল লক করা থাকলে (বা যদি আপনার অধিকার না থাকে) আপনার ডিলিটরা খুব সহজেই একটি ব্যতিক্রম ছুঁড়ে ফেলতে পারে। ব্যতিক্রমগুলির তালিকার জন্য ফাইলআইনফিট.ডিলিটটি দেখুন।
শেন কোর্ট্রিল

উত্তর:


831
System.IO.DirectoryInfo di = new DirectoryInfo("YourPath");

foreach (FileInfo file in di.GetFiles())
{
    file.Delete(); 
}
foreach (DirectoryInfo dir in di.GetDirectories())
{
    dir.Delete(true); 
}

আপনার ডিরেক্টরিতে যদি অনেকগুলি ফাইল থাকতে পারে EnumerateFiles()তবে তার চেয়েও বেশি দক্ষ GetFiles()because কারণ আপনি যখন ব্যবহার করেন EnumerateFiles()তখন পুরো সংগ্রহটি ফিরে আসার আগে আপনি এটি গণনা শুরু করতে পারেন, GetFiles()যেখানে এটির গণনা শুরু করার আগে আপনাকে পুরো সংগ্রহটি মেমোরিতে লোড করা দরকার opposed এই উদ্ধৃতিটি এখানে দেখুন :

অতএব, আপনি যখন অনেকগুলি ফাইল এবং ডিরেক্টরিগুলি নিয়ে কাজ করছেন তখন এনিউমারেট ফাইলস () আরও দক্ষ হতে পারে।

একই প্রযোজ্য EnumerateDirectories()এবং GetDirectories()। সুতরাং কোডটি হবে:

foreach (FileInfo file in di.EnumerateFiles())
{
    file.Delete(); 
}
foreach (DirectoryInfo dir in di.EnumerateDirectories())
{
    dir.Delete(true); 
}

এই প্রশ্নের প্রয়োজনে, সত্যই ব্যবহার করার কোনও কারণ নেই GetFiles()এবং GetDirectories()


6
কি সম্পর্কে stackoverflow.com/questions/12415105/... "আপনি যখন Directory.Delete কল এবং একটি ফাইল যেমন পথ খোলা আছে, Directory.Delete সমস্ত ফাইল মুছে সফল কিন্তু যখন Directory.Delete RemoveDirectory একটি কল" ডিরেক্টরির খালি নয় " ব্যতিক্রম নিক্ষেপ করা হয়েছে কারণ সেখানে মুছে ফেলার জন্য চিহ্নিত একটি ফাইল রয়েছে তবে বাস্তবে মোছা হয়নি। "
কিকিনেট

74
ডিরেক্টরীআইএনফোও আরও ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে। BTW: Directory.Delete(path, true)সব :) যত্ন নিতে হবে
AcidJunkie

57
@ এসিডজানকি, এটি প্রশ্নাবলিক ডিরেক্টরিটিও সরিয়ে ফেলবে, যেখানে ওপি বিশেষত রুট ডিরেক্টরিটি রাখার জন্য বলেছে।
মার্ক এল।

5
মনে রাখবেন যে কোনও ফাইল কেবল পঠনযোগ্য হলে এটি কাজ করবে না। কল করার আগে আপনাকে কেবল পঠনযোগ্য পতাকাটি সরিয়ে ফেলতে হবে file.Delete()
বেন

8
সাব-ডিরেক্টরিতে ফাইল থাকলে এটি কাজ করবে না বলে মনে হচ্ছে।
cdiggins

174

হ্যাঁ, এটি করার সঠিক উপায়। যদি আপনি নিজেকে "ক্লিন" (বা যেমন আমি একে "খালি" ফাংশন বলতে পছন্দ করি) দিতে চাইছেন তবে আপনি একটি এক্সটেনশন পদ্ধতি তৈরি করতে পারেন।

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

4
শেষ লাইনটি ডিরেক্টরিটির পরিবর্তে সাব-ডাইরেক্টরি.ডিলিট (সত্য) হওয়া উচিত e ডিলিট (সত্য)। আমি কেবল কোডটি কাটা-পেস্ট করেছি এবং এটি মূল ডিরেক্টরিটি মুছে ফেলেছে deleted কোডটির জন্য ধন্যবাদ এটি দুর্দান্ত!
এক্সিমিলি

26
দয়া করে মনে রাখবেন Emptyইতিমধ্যে সি # বিদ্যমান, জন্য string। আমি যদি অন্য কোনও নাম Emptyদেখি তবে আমি অবাক হয়ে যাব যদি এটি আমাকে boolখালি খালি না হয় বলে দেয় বা তার পরিবর্তে অবজেক্টটি (বা ফাইল সিস্টেম) পরিবর্তন করে । যে কারণে, আমি নাম দিয়ে যেতে হবে Clean
ডিফল্ট

5
@ ডিফল্ট: আমি মনে করি না যে এক প্রকারের ইতিমধ্যে একটি সম্পত্তি রয়েছে অন্য কোনও (সম্পূর্ণ সম্পর্কহীন) প্রকারের এটি থাকা উচিত কিনা তা নিয়ে কোনও প্রভাব থাকতে হবে; এবং বৈশিষ্ট্য এবং ফাংশনগুলির জন্য কনভেনশন যা শব্দের জন্য রাষ্ট্র নির্দেশ করে যা ক্রিয়াপদও হতে পারে সেগুলি Is(অর্থাত্ IsEmptyতার পরিবর্তে Empty) এর সাথে উপসর্গ করা ।
অ্যাডাম রবিনসন

3
@ অ্যাডামরবিনসন কেবল এটি নোট করতে চেয়েছিলেন। করতে আমাকে , কি মাইক্রোসফট তাদের কোড আছে কিছু জন্মদান আছে। তবে এটি প্রত্যেকেরই ব্যাখ্যা করার জন্য :)
ডিফল্ট

4
@ সিমোনহেইনস: প্রশ্নের মূল বিষয়টি ছিল ডিরেক্টরিটি খালি করা (অর্থাত্ এর অভ্যন্তরের সমস্ত কিছু মুছুন ), ডিরেক্টরিটি নিজেই মুছতে হবে না।
অ্যাডাম রবিনসন

77

নিম্নলিখিত কোডটি পুনরাবৃত্তভাবে ফোল্ডারটি সাফ করবে:

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

আমার জন্য কাজ করেছেন, যখন ডিরেক্টরি.ডিলিট (পথ, সত্য); ফোল্ডারটি খালি ছিল না এমন অভিযোগ ছুড়ে ফেলেছিলেন
জ্যাক গ্রিফিন

40
 new System.IO.DirectoryInfo(@"C:\Temp").Delete(true);

 //Or

 System.IO.Directory.Delete(@"C:\Temp", true);

1
দ্বিতীয় বিকল্প, ডিরেক্টরি.ডিলিট (স্ট্রিং, বুলিয়ান) আমার পক্ষে কাজ করেছিল।
স্টিফেন ম্যাকডুগল

15
এটি রুট ডিরেক্টরি মুছে দেয়, যেখানে ওপ বিশেষভাবে এটি বজায় রাখতে বলেছে।
মার্চ এল।

2
Deleteডিরেক্টরি উপস্থিত না থাকলে নিক্ষেপ করবে, তাই Directory.Existsপ্রথমে একটি চেক করা নিরাপদ হবে ।
জেমস

1
@ জেমস Directory.Existsযথেষ্ট নয়; চেকের পরে, অন্য থ্রেডটি ডিরেক্টরিটির নাম পরিবর্তন বা সরিয়ে ফেলতে পারে। এটি আরও নিরাপদ try-catch
andre_ss6

2
@ মারভ কেবল একটি যুক্ত করার সাথে যত্নশীল Directory.Createকারণ পুনরাবৃত্তিকে সংক্রামিত হওয়ার Directory.Deleteনিশ্চয়তা দেওয়া হয় না ..
অ্যান্ড্রু হ্যানলন

38

আমরা লিনকুইয়ের প্রতি ভালবাসাও প্রদর্শন করতে পারি :

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(...)যা একই 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);
        }
    }
}

1
এবং আপনি যদি সাব-ডাইরেক্টরিগুলিও মুছে ফেলার চেষ্টা করছেন তবে এটি কার্যকর foreach (var dir in info.GetDirectories("*", SearchOption.AllDirectories).OrderByDescending(dir => dir.FullName.Length)) dir.Delete();হতে পারে।
ওয়ার্টি

1
আপনি যদি পারফরম্যান্স পছন্দ করেন তবে পদ্ধতিগুলির পরিবর্তে directory.EnumerateFiles()এবং এর directory.EnumerateDirectories()পরিবর্তে বিবেচনা করুন directory.Get*()
টিনিস্টার

1
মজার বিষয়, আমার নিজের IEnumerable<T>.ForEach()এক্সটেনশনের একটি সংক্ষিপ্ত XML মন্তব্য রয়েছে, "লঙ্ঘন! লঙ্ঘন! অশুদ্ধ!"।
মার্ক এল।

আরে কি দ্বিতীয় কারণ? তৃতীয়? ইত্যাদি?
বিল রবার্টস 21

লল @ আরএএসএক্স - তিনি আপনার সাথে কথা বলছেন: "আপনি যদি এই দার্শনিক আপত্তিগুলির সাথে একমত হন না এবং এই প্যাটার্নে যদি কোনও উপায়ে ব্যবহারিক মূল্য খুঁজে না পান তবে এগিয়ে যান এবং নিজেই এই তুচ্ছ ওয়ান-লাইন লিখুন।"
বিল রবার্টস 21

37

সহজ উপায়:

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

সচেতন হন যে এটি ফোল্ডারে কিছু অনুমতি মুছে ফেলতে পারে।


9
সচেতন হন যে এটি পাথের যে কোনও বিশেষ অনুমতিগুলি সরিয়ে ফেলবে
ম্যাথু লক

6
এই দুটি ক্রয়ের মধ্যে আপনাকে সময়সীমা যুক্ত করতে হবে। এই কোডটি চালানোর চেষ্টা করুন এবং আপনি ব্যতিক্রম পাবেন: যখন (সত্য) {ডিরেক্টরি। ডিলিট (@ "সি: \ মাইফোল্ডার", সত্য); Directory.CreateDirectory (@ "সি: \ Myfolder"); }
আরসিমন

31
private void ClearFolder(string FolderName)
{
    DirectoryInfo dir = new DirectoryInfo(FolderName);

    foreach(FileInfo fi in dir.GetFiles())
    {
        try
        {
            fi.Delete();
        }
        catch(Exception) { } // Ignore all exceptions
    }

    foreach(DirectoryInfo di in dir.GetDirectories())
    {
        ClearFolder(di.FullName);
        try
        {
            di.Delete();
        }
        catch(Exception) { } // Ignore all exceptions
    }
}

যদি আপনি জানেন যে কোনও সাব-ফোল্ডার নেই, তবে এর মতো কিছু সহজেই হতে পারে:

    Directory.GetFiles(folderName).ForEach(File.Delete)

সিস্টেম টেম্প ফোল্ডারটি সাফ করার জন্য আমি এই ফাংশনটি ব্যবহার করেছি। আমি কেবলমাত্র সমস্ত ব্যতিক্রম উপেক্ষা করার জন্য মুছুন () এবং ইস্রাডইনলি প্রায় চেষ্টা করেছিলাম।
হাম্বাদগুলি

@ হামব্যাডস, আপনি কি এই উত্তরটি আপডেট করতে পারেন, বা কোডটি এখানে রেখে দিতে পারেন, এবং আমি আপনার পরিবর্তনগুলি দিয়ে আপডেট করব?
জুমালাইফগার্ড

13
System.IO.Directory.Delete(installPath, true);
System.IO.Directory.CreateDirectory(installPath);

3
উপরের মতই: সচেতন থাকুন যে এটি কোনও বিশেষ অনুমতি পাথটিকে সরিয়ে ফেলবে।
এইচবি0

8

আমি চেষ্টা করেছি প্রতিটি পদ্ধতি, তারা System.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); 

1
খালি ডিরেক্টরিগুলির ক্ষেত্রে আমি সর্বদা rd / s / q + mkdir পছন্দ করি।
দাউদ ওহিয়া

7
এটি ক্রস-প্ল্যাটফর্ম সমাধান নয়। ইউনিক্সের মতো সিস্টেমগুলির স্পষ্টতই cmd.exe নেই, তারা .exe ফাইলগুলি চালায় না। সি # শুধুমাত্র উইন্ডোজ নয়, সেখানে মনোও রয়েছে, যা ক্রস প্ল্যাটফর্ম।
নাম প্রদর্শন করুন

1
@ সার্জবার্স প্রশ্নে ক্রস প্ল্যাটফর্মের প্রয়োজনীয়তা নেই এবং সি # হওয়ায় সম্ভবত উইন্ডোজটির জন্য সমাধানটি ব্যবহার করা হবে। এটি একমাত্র উত্তর বলে মনে হচ্ছে যা। নেট ফাংশন ব্যবহার করে না, সুতরাং এটি বিকল্প হিসাবে বেশ মূল্যবান।
অ্যালেক্স প্যান্ড্রিয়া

7

এখানে সমস্ত পোস্ট পড়ার পরে আমি যে সরঞ্জামটি শেষ করেছি তা এখানে। এটা করে

  • মোছা যায় এমন সবগুলি মুছে দেয়
  • কিছু ফাইল ফোল্ডারে থেকে থাকলে মিথ্যা ফেরত দেয়

এটা সঙ্গে পুলিশ

  • পঠনযোগ্য ফাইল files
  • বিলম্ব বিলম্ব
  • লক করা ফাইল

এটি ডিরেক্টরিটি ব্যবহার করে না e মুছুন কারণ ব্যতিক্রমের প্রক্রিয়াটি বাতিল হয়ে গেছে।

    /// <summary>
    /// Attempt to empty the folder. Return false if it fails (locked files...).
    /// </summary>
    /// <param name="pathName"></param>
    /// <returns>true on success</returns>
    public static bool EmptyFolder(string pathName)
    {
        bool errors = false;
        DirectoryInfo dir = new DirectoryInfo(pathName);

        foreach (FileInfo fi in dir.EnumerateFiles())
        {
            try
            {
                fi.IsReadOnly = false;
                fi.Delete();

                //Wait for the item to disapear (avoid 'dir not empty' error).
                while (fi.Exists)
                {
                    System.Threading.Thread.Sleep(10);
                    fi.Refresh();
                }
            }
            catch (IOException e)
            {
                Debug.WriteLine(e.Message);
                errors = true;
            }
        }

        foreach (DirectoryInfo di in dir.EnumerateDirectories())
        {
            try
            {
                EmptyFolder(di.FullName);
                di.Delete();

                //Wait for the item to disapear (avoid 'dir not empty' error).
                while (di.Exists)
                {
                    System.Threading.Thread.Sleep(10);
                    di.Refresh();
                }
            }
            catch (IOException e)
            {
                Debug.WriteLine(e.Message);
                errors = true;
            }
        }

        return !errors;
    }

6

নিম্নলিখিত কোডটি ডিরেক্টরিটি পরিষ্কার করবে, তবে রুট ডিরেক্টরিটি সেখানে রেখে দেবে (পুনরাবৃত্ত)।

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


5

ফাইলআইএনফো এবং ডিরেক্টরি ইন্ফোর পরিবর্তে ফাইল এবং ডিরেক্টরি দিয়ে কেবল স্থিতিশীল পদ্ধতি ব্যবহার করা দ্রুত সম্পাদন করবে। ( সি # তে ফাইল এবং ফাইলআইনফোর মধ্যে পার্থক্য কী তা স্বীকৃত উত্তর দেখুন )। উত্তরটি ইউটিলিটি পদ্ধতি হিসাবে দেখানো হয়েছে।

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

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

3
string directoryPath = "C:\Temp";
Directory.GetFiles(directoryPath).ToList().ForEach(File.Delete);
Directory.GetDirectories(directoryPath).ToList().ForEach(Directory.Delete);

'সিস্টেম.IO.IOException' টাইপের ব্যতিক্রমটি mscorlib.dll এ ঘটেছিল তবে ব্যবহারকারী কোডে এটি পরিচালিত হয়নি অতিরিক্ত তথ্য: ডিরেক্টরিটি খালি নেই।
কিপুসোয়েপ

3

উইন্ডোজ In-এ, আপনি যদি উইন্ডোজ এক্সপ্লোরার দিয়ে স্রেফ এটি ম্যানুয়ালি তৈরি করে থাকেন, তবে ডিরেক্টরি কাঠামোটি এর অনুরূপ:

C:
  \AAA
    \BBB
      \CCC
        \DDD

ডিরেক্টরি সিটি পরিষ্কার করার জন্য মূল প্রশ্নে প্রস্তাবিত কোডটি চালানো:: এএএ, di.Delete(true)বিবিবি মোছার চেষ্টা করার সময় লাইনটি সর্বদা আইওএক্সেপশন "ডিরেক্টরিটি খালি নয়" দিয়ে ব্যর্থ হয়। এটি সম্ভবত উইন্ডোজ এক্সপ্লোরারে একরকম বিলম্ব / ক্যাশে হওয়ার কারণে।

নিম্নলিখিত কোডটি আমার জন্য নির্ভরযোগ্যভাবে কাজ করে:

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

কি সম্পর্কে stackoverflow.com/questions/12415105/... "আপনি যখন Directory.Delete কল এবং একটি ফাইল যেমন পথ খোলা আছে, Directory.Delete সমস্ত ফাইল মুছে সফল কিন্তু যখন Directory.Delete RemoveDirectory একটি কল" ডিরেক্টরির খালি নয় " ব্যতিক্রম নিক্ষেপ করা হয়েছে কারণ সেখানে মুছে ফেলার জন্য চিহ্নিত একটি ফাইল রয়েছে তবে বাস্তবে মোছা হয়নি। "
কিকিনেট

@ কিকিনেট: দেখে মনে হচ্ছে উইন্ডোজে আমরা একটি সমস্যা পেয়েছি। উইন্ডোজ মুছে ফেলার জন্য চিহ্নিত ফাইলগুলির তালিকার সাথে পরামর্শ করতে পারে এবং ডিরেক্টরিতে থাকা সমস্ত ফাইল যদি মুছে ফেলার জন্য চিহ্নিত করা হয় তবে ডিরেক্টরিটি খালি নেই বলে বলবেন না। যাইহোক আমার ওয়েটফোর্ডডাইরেক্টরিটোবেকোম এম্পটি () একটি কাজের সমাধান।
ফারফেরস্টেস্ট

2

এই সংস্করণটি পুনরাবৃত্তি কলগুলি ব্যবহার করে না, এবং কেবলমাত্র পঠনযোগ্য সমস্যা সমাধান করে।

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

1

ডাইরেক্টরিআইএনফো-র গেটডাইরেক্টরিজ পদ্ধতিটি ব্যবহার করুন।

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

1

নিম্নলিখিত উদাহরণটি দেখায় যে আপনি কীভাবে এটি করতে পারেন। এটি প্রথমে কিছু ডিরেক্টরি এবং একটি ফাইল তৈরি করে এবং এরপরে সেগুলি সরিয়ে দেয় 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 থেকে নেওয়া হয়েছে ।


1

উপরের সমস্যাটি মোকাবেলা করার সর্বোত্তম উপায় নয়। তবে এটি একটি বিকল্প ...

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

0
DirectoryInfo Folder = new DirectoryInfo(Server.MapPath(path)); 
if (Folder .Exists)
{
    foreach (FileInfo fl in Folder .GetFiles())
    {
        fl.Delete();
    }

    Folder .Delete();
}

আপনি আরও নির্দিষ্ট করে বলতে পারেন এবং কীভাবে এবং কেন এটি কাজ করা উচিত তা ব্যাখ্যা করতে পারেন?
গভীর হিমায়িত

3
শুধুমাত্র কোড সহ উত্তরগুলি উপযুক্ত নয়। এটি কীভাবে এবং কেন কাজ করবে / সমস্যার সমাধান করবে তা আপনার ব্যাখ্যা করা উচিত।
rdurand

0

এটি প্রদর্শিত হবে যে আমরা কীভাবে ফোল্ডারটি মুছব এবং এটির জন্য পরীক্ষা করব যে আমরা পাঠ্য বাক্সটি ব্যবহার করি

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

    }


}

}

0
using System.IO;

string[] filePaths = Directory.GetFiles(@"c:\MyDir\");

foreach (string filePath in filePaths)

File.Delete(filePath);

0

মূল থেকে কল

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

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

0

ফোল্ডারটি মুছতে, এটি পাঠ্য বাক্স এবং একটি বোতাম ব্যবহার করে কোড 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);
    }
}

-2
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
}

2
নীচে দেখুন ... "মুছে ফেলা এবং পুনরুদ্ধার করা" রাখার মতো নয়, সমস্ত এসিএল কাস্টমাইজেশন হারিয়ে যাবে।
মার্ক এল।

আমি এটার সাথে খুব সামান্য কিছু চেষ্টা করেছি যেহেতু আমি এসিএল কাস্টমাইজেশনের বিষয়ে চিন্তা করি না এবং ফোল্ডারটি আর তৈরি না হওয়ার পরে ইস্যুতে ছড়িয়ে পড়েছিDirectory.CreateDirectory
এসডি

-3

শুধু আপনাকে যা করতে হবে সেট করতে হয় optional recursive parameterকরতে True

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

ধন্যবাদ নেট। :)


3
এটি ডিরেক্টরি নিজেই মুছে দেয়।
রাজত

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.