2009-07-21 14 views
9

मैं एक फ़ाइल जो मैं मैन्युअल रूप से नष्ट कर सकते हैं में एक अनधिकृत प्रवेश अपवादUnauthorizedAccessException जहां मैं एक ही कोड

  • हो रही है साथ दूसरों फ़ाइलें हटा सकते हैं एक फ़ोल्डर में एक फ़ाइल को नष्ट करने की कोशिश कर।
  • एक फ़ोल्डर जहाँ मैं फ़ाइल चिह्नित नहीं है अन्य फ़ाइलों
  • कोड से नष्ट करने के लिए कर सकती हूं और के रूप में केवल
  • पढ़ा इसके अलावा, मुझे एक स्टैंडअलोन पीसी में Windows XP का उपयोग कर रहा हूँ और मैं नहीं सौंपा है फ़ोल्डर या फ़ाइल के लिए कोई अनुमति।
  • कोई अन्य प्रक्रिया फ़ाइल

उपयोग कर रहा है यह मदद करता है, इस कोड को जहां अपवाद ocurrs है:

protected void DeleteImage(string imageName) 
{ 
    if (imageName != null) 
    { 
     string f = String.Format("~/Images/{0}", imageName); 
     f = System.Web.Hosting.HostingEnvironment.MapPath(f); 
     if (File.Exists(f)) 
     { 
      if (f != null) File.Delete(f); 
     } 
    } 
} 

ऐसा क्यों होता सकता है?

+0

यह अनुमति अनुमति की तरह लगता है। क्या अनुमतियां उन फ़ाइलों पर किसी भी तरह से अलग हैं जिन्हें आप हटा सकते हैं, जिसे आप नहीं कर सकते हैं? –

उत्तर

2

यदि यह केवल पढ़ने के लिए नहीं है तो यह संभव है कि वर्तमान में यह किसी अन्य प्रक्रिया द्वारा उपयोग में हो।

+2

उत्तर नहीं, टिप्पणी की तरह बेहतर – Kiquenet

+0

@Kiquenet: यह एक जवाब क्यों नहीं होगा? वास्तव में यह मेरे लिए क्या हो रहा था। केवल, वास्तव में यह प्रक्रिया ही थी जो इसे हटाने की कोशिश कर रही थी। (मैंने गलती से मेरी अद्यतन स्क्रिप्ट में एक प्रोजेक्ट का संदर्भ दिया था।) – teynon

0

आप, मानव उपयोगकर्ता, कुछ अधिकारों के साथ लॉगिन है। वेब सर्वर के पास विभिन्न अधिकारों के साथ एक अलग लॉगिन हो सकता है। एक उपयोगकर्ता IUSR_XXXX या ऐसी कुछ चीज़ से शुरू होता है। सुनिश्चित करें कि उपयोगकर्ता को निर्देशिका का अधिकार है।

उस संदर्भ के बारे में अधिक जानकारी के बिना जिसमें आप फ़ाइल को हटा रहे हैं, मुझे लगता है कि वेब सर्वर उपयोगकर्ता के पास आपके पास फ़ाइल के अलग-अलग अधिकार हैं।

1

जाँच हो रही है स्पष्ट पहले ...

जब आप फ़ाइल को खोलने के लिए और संपत्ति अपनी सुरक्षा सेटिंग पर एक नज़र डालें। क्या उपयोगकर्ता कोड चला रहा है (यानी यदि यह एएसपी.नेट, नेटवर्क सेवा/डोमेन सेवा खाता है) तो वास्तव में फ़ाइल को हटाने के लिए उपयोग है? यदि यह नहीं है, तो इसे बदलें और पुनः प्रयास करें।

क्या आप इसे मैन्युअल रूप से हटाने का प्रयास करते समय व्यवस्थापक के रूप में चल रहे हैं? यदि आप हैं, तो शायद यही कारण है कि आप इसे मैन्युअल रूप से हटाने में सक्षम हैं। इसे अपने एएसपी.नेट चलाने वाले खाते के रूप में हटाने का प्रयास करें (मुझे लगता है कि यह एएसपी.नेट है क्योंकि आप System.Web.Hosting.HostingEnvironment.MapPath का उपयोग कर रहे हैं।)

यदि दोनों विफल हो गए हैं, तो यह देखने का प्रयास करें कि कोई अन्य वास्तव में प्रक्रिया वास्तव में इस फ़ाइल का उपयोग कर रही है। पता लगाने के लिए अच्छा उपकरण SysInternal प्रक्रिया मॉनीटर है। इसे अपने फ़ाइल नाम वाले पथ से फ़िल्टर करें और आपको यह देखना चाहिए कि कुछ भी इसका उपयोग कर रहा है या नहीं। प्रक्रिया को समाप्त करें और पुनः प्रयास करें।

+0

सिसिनेरल टूल के लिए +1 (अब तक, मुझे नहीं पता था कि किसी भी सिसिनल टूल्स का उपयोग कैसे करें) – eKek0

+0

उपयोग में फ़ाइल को हटाने की कोशिश करना एक अनधिकृत एक्सेस अपवाद ? मैं एक और प्रकार के अपवाद की अपेक्षा करता हूं क्योंकि यह अनुमतियों में कोई समस्या नहीं है। –

17

मुझे एक ही समस्या का सामना करना पड़ा, और पाया कि मेरी अपनी निर्देशिका लिखना। डेलीट रैपर इसे ठीक कर दिया। यह डिफ़ॉल्ट रूप से पुनरावर्ती है: निर्देशिका, केवल पढ़ने फ़ाइल

using System.IO; 

public void DeleteDirectory(string targetDir) 
{ 
    File.SetAttributes(targetDir, FileAttributes.Normal); 

    string[] files = Directory.GetFiles(targetDir); 
    string[] dirs = Directory.GetDirectories(targetDir); 

    foreach (string file in files) 
    { 
     File.SetAttributes(file, FileAttributes.Normal); 
     File.Delete(file); 
    } 

    foreach (string dir in dirs) 
    { 
     DeleteDirectory(dir); 
    } 

    Directory.Delete(targetDir, false); 
} 
+0

http://caioproiete.net/en/csharp-delete-folder-cluding-its-sub- फ़ोल्डर्स-and-files-even-if-marked-as-read-only/ के बारे में क्या है? – Kiquenet

+0

मुझे यकीन नहीं है कि आपका क्या मतलब है? मुझे लगता है कि यह एक समान कार्य है ... लेकिन बिल्कुल वही नहीं ... जब मैंने इसे पहले इस्तेमाल किया, तो यह ठीक काम किया .... हालांकि थोड़ी देर हो गया! –

+2

धन्यवाद, आपने मेरी समस्या हल की है –

6

हैं, तो यह है कि Directory.Delete का उपयोग कर नहीं हटाया जाएगा। यह एमएस द्वारा मूर्खतापूर्ण कार्यान्वयन है।

मुझे आश्चर्य है कि किसी ने इंटरनेट पर इस विधि का सुझाव नहीं दिया है, जो निर्देशिका के माध्यम से इसे बिना घुमाए और प्रत्येक फ़ाइल के गुणों को बदलकर हटा देता है।यहाँ है कि है:

Process.Start("cmd.exe", "/c " + @"rmdir /s/q C:\Test\TestDirectoryContainingReadOnlyFiles"); 

+0

मुझे नहीं लगता कि यह मूर्खतापूर्ण है। यदि आप मैन्युअल रूप से इसे हटाते हैं, तो आप वास्तव में इसे रीसायकल बिन पर ले जा रहे हैं। –

+1

@ डेववंडेनइंडे निर्भर करता है, मैं आमतौर पर फ़ाइलों को स्थायी रूप से हटाने के लिए Shift + del का उपयोग करता हूं। – Nothing4You

+0

यह वह समाधान है जिसे मैं ढूंढ रहा हूं, धन्यवाद – Juran

0

मैं भी एक ही समस्या का सामना करना पड़ा लेकिन अंततः एक सामान्य दृष्टिकोण के साथ आया था (एक cmd खिड़की क्षण भर आग नहीं करने के लिए है, जो सभी इंटरनेट पर उपलब्ध है थोड़ा बदलें)। नीचे मेरे कोड हैं।

स्ट्रिंग pathfile = "सी: \ उपयोगकर्ता \ सार्वजनिक \ दस्तावेज़ \ Filepath.txt";

  if (!Directory.Exists(pathfile)) 
      { 
       File.SetAttributes(pathfile, FileAttributes.Normal); 
       File.Delete(pathfile); 
      } 


       using (FileStream fs = File.Create(pathfile)) 
       { 
        Byte[] info = new UTF8Encoding(true).GetBytes("What Ever Your Text is"); 

        fs.Write(info, 0, info.Length); 
        File.SetAttributes(pathfile, FileAttributes.ReadOnly); 

       } 
संबंधित मुद्दे