यह मौजूद है या नहीं यह जाँचने के बाद किसी फ़ाइल को कैसे हटाएँ


220

मैं C # उदा में एक फ़ाइल को कैसे हटा सकता हूं C:\test.txt, हालांकि बैच फ़ाइलों की तरह उसी तरह की विधि लागू करें जैसे

if exist "C:\test.txt"

delete "C:\test.txt"

else 

return nothing (ignore)

जवाबों:


388

यह फ़ाइल वर्ग का उपयोग करके बहुत सीधा है ।

if(File.Exists(@"C:\test.txt"))
{
    File.Delete(@"C:\test.txt");
}


जैसा कि क्रिस ने टिप्पणियों में बताया है, आपको वास्तव में File.Existsचेक करने की आवश्यकता नहीं है क्योंकि File.Deleteयदि फ़ाइल मौजूद नहीं है तो अपवाद को फेंकना नहीं है, हालांकि यदि आप निरपेक्ष पथ का उपयोग कर रहे हैं तो आपको यह सुनिश्चित करने के लिए चेक की आवश्यकता होगी संपूर्ण फ़ाइल पथ मान्य है।


13
यह परीक्षण वास्तव में आवश्यक नहीं है। मेरी पोस्ट देखें
क्रिस एबरले

20
यदि आप एक संभावित DirectoryNotFoundException को रोकना चाहते हैं तो परीक्षण आवश्यक है।
टिमोथी स्ट्रिम्पल

7
परीक्षण का उपयोग थियो को छोड़कर अपवाद के स्थान पर नहीं किया जाना चाहिए, बल्कि इसके साथ चालन में किया जाना चाहिए। किसी भी संख्या में परिदृश्य मौजूद हो सकते हैं चेकिंग रिटर्निंग ट्रू और डिलीट थिमिंग।
जोश

1
@फ़ाइल पथ से पहले क्यों है? मेरे लिए यह बिना काम करता है।
पास्कल एकरमैन

5
@ आपको बैकस्लैश को दोगुना करने की अनुमति देता है।
PRMan

105

System.IO.File.Delete का उपयोग करें जैसे:

System.IO.File.Delete(@"C:\test.txt")

प्रलेखन से:

यदि हटाई जाने वाली फ़ाइल मौजूद नहीं है, तो कोई अपवाद नहीं फेंका गया है।


7
यदि निर्देशिका निर्दिष्ट पथ अमान्य है (उदाहरण के लिए, यह किसी अनमैप पर है)।
टिमोथी स्ट्रिम्पल

5
कितना अजीब। Intellisense कहते हैं An exception is thrown if the specified file does not exist
सायनाफॉव्हकप्लेनेट

शायद आप .NET फ्रेमवर्क के किसी भिन्न संस्करण का उपयोग कर रहे हैं?
क्रिस एबरले

1
मैं .Net4 का उपयोग कर रहा हूं, ऐसा लगता है कि इंटैलिजेंस गलत है मैंने एक चेक चलाया है और कोई अपवाद नहीं फेंका गया है
डरफॉव्हकप्लेनेट

3
हाँ, मैंने कोशिश की और बस System.IO.File.Delete(@"C:\test.txt");काफी है। धन्यवाद
Berkay Turancı

34

आप System.IOनाम स्थान का उपयोग करके आयात कर सकते हैं:

using System.IO;

यदि फ़ाइलपथ फ़ाइल के पूर्ण पथ का प्रतिनिधित्व करता है, तो आप इसके अस्तित्व की जांच कर सकते हैं और इसे निम्नानुसार हटा सकते हैं:

if(File.Exists(filepath))
{
     try
    {
         File.Delete(filepath);
    } 
    catch(Exception ex)
    {
      //Do something
    } 
}  

2
क्यों न केवल डिलीट कॉल को जारी करें और किसी भी अपवाद को पकड़ें जो इंगित करता है कि फ़ाइल मौजूद नहीं थी?
antred

32
if (System.IO.File.Exists(@"C:\test.txt"))
    System.IO.File.Delete(@"C:\test.txt"));

परंतु

System.IO.File.Delete(@"C:\test.txt");

जब तक फ़ोल्डर मौजूद रहेगा, तब तक वही करेंगे।


23

यदि आप बचना चाहते हैं तो आपको DirectoryNotFoundExceptionयह सुनिश्चित करना होगा कि फ़ाइल की निर्देशिका वास्तव में मौजूद है। File.Existsइसे पूरा करता है। एक और तरीका है का उपयोग किया जाएगा Pathऔर Directoryइसलिए तरह उपयोगिता कक्षाएं:

string file = @"C:\subfolder\test.txt";
if (Directory.Exists(Path.GetDirectoryName(file)))
{
    File.Delete(file);
}

15
  if (System.IO.File.Exists(@"C:\Users\Public\DeleteTest\test.txt"))
    {
        // Use a try block to catch IOExceptions, to 
        // handle the case of the file already being 
        // opened by another process. 
        try
        {
            System.IO.File.Delete(@"C:\Users\Public\DeleteTest\test.txt");
        }
        catch (System.IO.IOException e)
        {
            Console.WriteLine(e.Message);
            return;
        }
    }


1

यदि आप FileStream का उपयोग करके उस फ़ाइल से पढ़ रहे हैं और फिर उसे हटाना चाहते हैं, तो FileDelete (पथ) को कॉल करने से पहले सुनिश्चित करें कि आप FileStream को बंद कर दें। मेरे पास यह मुद्दा था।

var filestream = new System.IO.FileStream(@"C:\Test\PutInv.txt", System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite);
filestream.Close();
File.Delete(@"C:\Test\PutInv.txt");

या एक usingबयान का उपयोग करें , जहां File.Delete()कोष्ठक के बाहर जाना होगा। आपके पास जो उदाहरण है, उसमें आपको भी करना चाहिए filestream.Dispose();
vapcguy

1

कभी-कभी आप एक फ़ाइल को हटाना चाहते हैं जो भी हो (जो भी अपवाद होता है, कृपया फ़ाइल को हटा दें)। ऐसी स्थितियों के लिए।

public static void DeleteFile(string path)
        {
            if (!File.Exists(path))
            {
                return;
            }

            bool isDeleted = false;
            while (!isDeleted)
            {
                try
                {
                    File.Delete(path);
                    isDeleted = true;
                }
                catch (Exception e)
                {
                }
                Thread.Sleep(50);
            }
        }

नोट: यदि निर्दिष्ट फ़ाइल मौजूद नहीं है, तो एक अपवाद नहीं फेंका गया है।


10
इसलिए आप फ़ाइल को हटाए जाने तक प्रति सेकंड 20 बार हटाने की कोशिश कर रहे हैं। क्या होगा, अगर किसी कारण से, फ़ाइल को हटाया नहीं जा सकता है और प्रोग्राम इसे हमेशा के लिए हटाने की कोशिश करेगा? मुझे नहीं लगता कि यह अच्छा समाधान है।
kv1dr

2
बहुत कम से कम, आपको एक टाइमआउट पैरामीटर प्रदान करना चाहिए।
antred

@ kv1dr सही। मुझे लगता है कि आपको सीमित समय के लिए प्रयास करना चाहिए और यदि फ़ाइल को हटाया नहीं गया था तो एक विफलता संदेश लौटाएं।
QMaster

0

यह सबसे सरल तरीका होगा,

if (System.IO.File.Exists(filePath)) 
{
  System.IO.File.Delete(filePath);
  System.Threading.Thread.Sleep(20);
}

Thread.sleep पूरी तरह से काम करने में मदद करेगा, अन्यथा, यदि हम फ़ाइल की प्रतिलिपि बनाते हैं या लिखते हैं तो यह अगले चरण को प्रभावित करेगा।

एक और तरीका मैंने किया है,

if (System.IO.File.Exists(filePath))
{
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
System.IO.File.Delete(filePath);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.