2014-12-22 6 views
5

सारांश:प्रवेश निषेध जबकि exe फ़ाइल हटाने से समस्या का

मैं एक सांत्वना अनुप्रयोग है कि, एक नया स्थान, एक स्थानीय ड्राइव करने के लिए कई फ़ोल्डर्स और फ़ाइलों की प्रतिलिपि बनाने के बाद, यह तो कुछ फ़ाइलें/फ़ोल्डर को हटा देता है । इन फाइलों में से एक यह हटाता है .exe फ़ाइलें। जब हटाने का प्रयास कर कहा फ़ाइलों यह मुझे एक बात से इनकार किया पहुँच त्रुटि देता है

अन्य नोट्स (फ़ाइलों और फ़ोल्डरों के अन्य प्रकार के रूप में अच्छी तरह से हटाने का प्रयास करते यह भी होता है):।

मैं कई सवाल देखा था, इस तरह के Unable to delete .exe file through c#. के रूप में हालांकि यह प्रक्रिया मेरी स्थानीय मशीन पर कभी नहीं चल रही थी और न ही स्रोत पर इसकी प्रतिलिपि बनाई गई थी। मैं अपने डोमेन पर स्थानीय व्यवस्थापक और एक डोमेन व्यवस्थापक दोनों हूं, और जिन निर्देशिकाओं के साथ मैं काम कर रहा हूं उन सभी फ़ोल्डरों और फ़ाइलों पर स्वामित्व था। लेकिन यह कोड से फ़ाइल को हटाने की कोशिश करते समय भी मुझे पहुंच से इनकार करता है। मैं फिर भी मैन्युअल रूप से इस तरह के फ़ाइलें/फ़ोल्डर को हटाने के लिए कर रहा हूँ (कुंजी हटाने के लिए क्लिक करें)

समस्या:।

के रूप में कहा गया है ऊपर मैं एक तरह से मुझे पहुँच को अस्वीकार इन हटाएँ "इस समस्या को अतीत पाने के लिए देख रहा हूँ अवैध "फ़ाइल प्रकार और उन्हें मेरे कोड से हटा दें।

मेरे कोड: (अपडेट किया गया)

#region Delete_Illegal_Items 
    public static void RemoveIllegalItems() 
    { 
     Console.Clear(); 
     DirectoryInfo Libraries = new DirectoryInfo(Library.DestinationMain); 
     try 
     { 
      foreach (var Lib in Libraries.GetDirectories()) 
      { 
       Console.WriteLine("Working On {0}.", Lib.Name); 
       Parallel.Invoke(
         () => 
         { 
          RemoveBadFiles(Lib); 
         }, 

         () => 
         { 
          DeleteEmptyFolders(Lib); 
         } 
        ); 
      } 
     } 
     catch (AggregateException e) 
     { 
      Console.WriteLine("There Was An Unusual Error During Initialization Of Library Correction:\n{0}", e.InnerException.ToString()); 
     } 
    } 

    private static string[] BadFiles = { 
             @".hta", 
             @".exe", 
             @".lnk", 
             @".tmp", 
             @".config", 
             @".ashx", 
             @".hta.", 
             @".hta::$DATA", 
             @".zip", 
             @".asmx", 
             @".json", 
             @".soap", 
             @".svc", 
             @".xamlx", 
             @".msi", 
             @".ops", 
             @".pif", 
             @".shtm", 
             @".shtml", 
             @"smt", 
             @".vb", 
             @".vbe", 
             @".vbs", 
             @".ds_store", 
             @".db", 
             @".ini", 
             @".tiff" 
             }; 
    private static void RemoveBadFiles(DirectoryInfo directory) 
    { 
     DirectoryInfo[] dirs = null; 
     FileInfo[] files = null; 
     if (directory != null) 
     { 
      files = directory.GetFiles(); 
     } 

     try 
     { 
      dirs = directory.GetDirectories(); 
     } 
     catch (IOException) { } 
     catch (Exception e) 
     { 
      Console.WriteLine("\nError During Enumeration Of Items To Delete:\n{0}", e.Message); 
     } 

     if (files != null) 
     { 
      foreach (var file in files) 
      { 
       try 
       { 
        if (file.IsReadOnly) 
        { 
         file.IsReadOnly = false; 
        } 

        if (BadFiles.Contains(Path.GetExtension(file.FullName))) 
        { 
         File.Delete(file.FullName); 
        } 
       } 
       catch (Exception e) 
       { 
        Console.WriteLine("\nError During Removal Or Illegal Files:\n" + e.Message); 
       } 
      } 
     } 

     if (dirs != null) 
     { 
      foreach (var dir in dirs) 
      { 
       switch (dir.Name) 
       { 
        case ".TemporaryItems": 
         { 
          try 
          { 
           Directory.Delete(dir.FullName); 
          } 
          catch { } 
          break; 
         } 
        case "AI_RecycleBin": 
         { 
          try 
          { 
           Directory.Delete(dir.FullName); 
          } 
          catch { } 
          break; 
         } 
        case ".ToRemove": 
         { 
          try 
          { 
           Directory.Delete(dir.FullName); 
          } 
          catch { } 
          break; 
         } 
        default: 
         { 
          break; 
         } 
       } 
       RemoveBadFiles(dir); 
      } 
     } 
    } 

    private static void DeleteEmptyFolders(DirectoryInfo directory) 
    { 
     Program Main = new Program(); 
     try 
     { 
      DirectoryInfo[] dirs = directory.GetDirectories(); 

      foreach (var subDirectory in dirs) 
      { 
       int sum = Library.CountLibrary(subDirectory.FullName); 

       if (sum == 0) 
       { 
        Directory.Delete(subDirectory.FullName); 
       } 

       DeleteEmptyFolders(subDirectory); 
      } 
     } 
     catch { } 
    } 
    #endregion 

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

+0

आपके द्वारा कंसोल किए गए उपयोगकर्ता को कौन सी अनुमतियां सिस्टम पर चलती हैं? क्या कंसोल ऐप इन फाइलों को बना रहा है? –

+0

यह मेरे अंतर्गत चल रहा है, फ़ाइलों को एक नेटवर्क फाइलशेयर से स्थानीय ड्राइव में कॉपी किया जा रहा है जहां मेरे पास स्थानीय व्यवस्थापक अधिकार हैं। इसके अलावा fileshare और स्थानीय मशीन दोनों एक डोमेन के अंदर हैं कि मेरे पास हमारे डोमेन के तहत सब कुछ के लिए पूर्ण पढ़ने/लिखने का उपयोग है। यह कुछ भी नहीं बना रहा है, कॉपी की गई प्रतिलिपि बना रहा है और फिर कॉपी किए गए डेटा से हटा रहा है। – CalebB

+0

कौन सी रेखा अपवाद का कारण बनती है? क्या यह किसी भी फाइल पर या शायद केवल एक विशेष फ़ाइल पर लागू होता है? – dymanoid

उत्तर

1

समस्या का पता लगाया गया था कि फ़ाइलों को "केवल पढ़ने के लिए" के रूप में चिह्नित किया गया था, इसलिए मैंने फ़ाइल को हटाने से पहले एक if स्टेटमेंट जोड़ा था, यह जांचने के लिए कि क्या यह था और यदि आवश्यक हो तो चिह्न हटा दें। यहां वह कोड है जो सभी वांछित फ़ाइलों को हटाने के लिए सफलतापूर्वक काम करता है।

#region Delete_Illegal_Items 
    public static void RemoveIllegalItems() 
    { 
     Console.Clear(); 
     DirectoryInfo Libraries = new DirectoryInfo(Library.DestinationMain); 
     try 
     { 
      foreach (var Lib in Libraries.GetDirectories()) 
      { 
       Console.WriteLine("Working On {0}.", Lib.Name); 
       Parallel.Invoke(
         () => 
         { 
          RemoveBadFiles(Lib); 
         }, 

         () => 
         { 
          DeleteEmptyFolders(Lib); 
         } 
        ); 
      } 
     } 
     catch (AggregateException e) 
     { 
      Console.WriteLine("There Was An Unusual Error During Initialization Of Library Correction:\n{0}", e.InnerException.ToString()); 
     } 
    } 

    private static string[] BadFiles = { 
             @".hta", 
             @".exe", 
             @".lnk", 
             @".tmp", 
             @".config", 
             @".ashx", 
             @".hta.", 
             @".hta::$DATA", 
             @".zip", 
             @".asmx", 
             @".json", 
             @".soap", 
             @".svc", 
             @".xamlx", 
             @".msi", 
             @".ops", 
             @".pif", 
             @".shtm", 
             @".shtml", 
             @"smt", 
             @".vb", 
             @".vbe", 
             @".vbs", 
             @".ds_store", 
             @"ds_store", 
             @"._.Trashes", 
             @".Trashes", 
             @".db", 
             @".dat", 
             @".sxw", 
             @".ini", 
             @".tif", 
             @".tiff" 
             }; 
    private static void RemoveBadFiles(DirectoryInfo directory) 
    { 
     DirectoryInfo[] dirs = null; 
     FileInfo[] files = null; 
     if (directory != null) 
     { 
      try 
      { 
       files = directory.GetFiles(); 
      } 
      catch (IOException) { } 
     } 

     try 
     { 
      dirs = directory.GetDirectories(); 
     } 
     catch (IOException) { } 
     catch (Exception e) 
     { 
      Console.WriteLine("\nError During Enumeration Of Items To Delete:\n{0}", e.Message); 
     } 

     if (files != null) 
     { 
      foreach (var file in files) 
      { 
       try 
       { 
        if (file.IsReadOnly) 
        { 
         file.IsReadOnly = false; 
        } 

        if (BadFiles.Contains(Path.GetExtension(file.FullName)) || BadFiles.Contains(file.Name)) 
        { 
         File.Delete(file.FullName); 
        } 
       } 
       catch (Exception e) 
       { 
        Console.WriteLine("\nError During Removal Or Illegal Files:\n" + e.Message); 
       } 
      } 
     } 

     if (dirs != null) 
     { 
      foreach (var dir in dirs) 
      { 
       switch (dir.Name) 
       { 
        case ".TemporaryItems": 
         { 
          try 
          { 
           Directory.Delete(dir.FullName); 
          } 
          catch { } 
          break; 
         } 
        case "TemporaryItems": 
         { 
          try 
          { 
           Directory.Delete(dir.FullName); 
          } 
          catch { } 
          break; 
         } 
        case "AI_RecycleBin": 
         { 
          try 
          { 
           Directory.Delete(dir.FullName); 
          } 
          catch { } 
          break; 
         } 
        case ".ToRemove": 
         { 
          try 
          { 
           Directory.Delete(dir.FullName); 
          } 
          catch { } 
          break; 
         } 
        default: 
         { 
          break; 
         } 
       } 
       RemoveBadFiles(dir); 
      } 
     } 
    } 

    private static void DeleteEmptyFolders(DirectoryInfo directory) 
    { 
     Program Main = new Program(); 
     try 
     { 
      DirectoryInfo[] dirs = directory.GetDirectories(); 

      foreach (var subDirectory in dirs) 
      { 
       int sum = Library.CountLibrary(subDirectory.FullName); 

       if (sum == 0) 
       { 
        Directory.Delete(subDirectory.FullName); 
       } 

       DeleteEmptyFolders(subDirectory); 
      } 
     } 
     catch { } 
    } 
    #endregion 

उन लोगों के लिए धन्यवाद जो टिप्पणी करते हैं और मदद करते हैं। और उम्मीद है कि यह भविष्य में दूसरों की मदद कर सकता है।

+0

'BadFiles' को 'हैशसेट ' बनाने पर विचार करें। 'हैशसेट। संपर्क '' ऐरे' से अधिक तेज़ होगा। 'हैशसेट। कॉन्टेन्स' अनुक्रमिक खोज की बजाय प्रत्यक्ष लुकअप करता है। यह इस एप्लिकेशन के लिए रनटाइम गति में कोई फर्क नहीं पड़ता है क्योंकि आपका सीमित कारक डिस्क I/O समय है, लेकिन यह एक अच्छा सामान्य अभ्यास है। –

+0

मैं निश्चित रूप से उसमें देखता हूं, सुझावों के लिए धन्यवाद। – CalebB

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