2013-01-02 149 views
3

我有一個文件夾,其中包含子文件夾和只讀屬性(文件和文件夾)的文件。我想用子文件夾和文件刪除此文件夾。刪除c中的文件夾和子文件夾#

我寫了這個代碼:

static void Main(string[] args) 
{   
    DirectoryInfo mm = new DirectoryInfo(@"c:\ex"); 
    string aa = Convert.ToString(mm); 
    string[] allFileNames = 
     System.IO.Directory.GetFiles(aa, 
            "*.*", 
            System.IO.SearchOption.AllDirectories); 
    string[] alldirNames = 
     System.IO.Directory.GetDirectories(aa, 
             "*", 
             System.IO.SearchOption.AllDirectories); 

    foreach (string filename in allFileNames) 
    { 
     FileAttributes attr = File.GetAttributes(filename); 
     File.SetAttributes(filename, attr & ~FileAttributes.ReadOnly); 

    } 

    foreach (string dirname in alldirNames) 
    { 
     FileAttributes attr = File.GetAttributes(dirname); 
     File.SetAttributes(dirname, attr & ~FileAttributes.ReadOnly); 
     Directory.Delete(dirname , true); 
    } 

    FileInfo[] list = mm.GetFiles(); 

    foreach (FileInfo k in list) 
    { 
     k.Delete(); 
    } 
    mm.Delete(); 
    Console.ReadKey(); 
} 

現在的問題是,每當我運行它,它給了我下面的錯誤:

Could not find a part of the path 'c:\ex\xx\bb'.

這個錯誤是什麼意思?

+1

你爲什麼要轉換'DirectoryInfo'爲字符串?您可以直接使用['DirectoryInfo.GetFiles'](http://msdn.microsoft.com/en-us/library/ms143327.aspx)。 –

+0

這可能意味着你試圖刪除某些文件或文件目錄中有零個文件的文件..我會建議你做一些事情..例如..列表你應該檢查list.Count> 0是否也它是在mm.Delete ..上拋出一個錯誤?也谷歌如何使用'DirectoryInfo'一個更重要的事情你有使用調試器步驟通過代碼..?如果是這樣,請報告哪一行拋出錯誤.. – MethodMan

+0

看看這個鏈接以及如何設置FileAttributes,http://www.csharp-examples.net/file-attributes/ – MethodMan

回答

0

以前的答案可能會奏效,但我相信它會在只讀文件的問題發生。但要確保刪除和刪除任何屬性ReadOnly,執行此過程的最佳方法是您必須使用一種方法來簡化您所做的工作,而不是使用對象的正確屬性,例如,使用

DirectoryInfo.ToString()

,並使用

DirectoryInfo.GetFiles (aa ...

你沒有使用.NET Framework提供了DirectoryInfo類中的資源。請看下圖:

void DirectoryDelete(string strOriginalPath) 
    { 
     DirectoryInfo diOriginalPath = new DirectoryInfo(strOriginalPath); 
 if (diOriginalPath.Attributes.HasFlag(FileAttributes.ReadOnly)) 
      diOriginalPath.Attributes &= ~FileAttributes.ReadOnly; 

     string[] lstFileList = Directory.GetFiles(strOriginalPath); 
     string[] lstdirectoryList = Directory.GetDirectories(strOriginalPath); 

     if (lstdirectoryList.Length > 0) 
     { 
      // foreach on the subdirs to the call method recursively 
      foreach (string strSubDir in lstdirectoryList) 
       DirectoryDelete(strSubDir); 
     } 

     if (lstFileList.Length > 0) 
     { 
      // foreach in FileList to be delete files 
      foreach (FileInfo fiFileInDir in lstFileList.Select(strArquivo => new FileInfo(strArquivo))) 
      { 
       // removes the ReadOnly attribute 
       if (fiFileInDir.IsReadOnly) 
        fiFileInDir.Attributes &= ~FileAttributes.ReadOnly; 

       // Deleting file 
       fiFileInDir.Delete(); 
      } 
     } 

     diOriginalPath.Delete(); 
    } 
+0

這搜索的根目錄和第一級子文件夾我不得不使用 System.IO.SearchOption.AllDirectories 包括所有子目錄 現在它的工作原理 – Bari

0
EmptyFolder(new DirectoryInfo(@"C:\your Path")) 
Directory.Delete(@"C:\your Path"); 

private void EmptyFolder(DirectoryInfo directoryInfo) 
{ 
    foreach (FileInfo file in directoryInfo.GetFiles()) 
    {  
     file.Delete(); 
    } 

    foreach (DirectoryInfo subfolder in directoryInfo.GetDirectories()) 
    { 
     EmptyFolder(subfolder); 
    } 
} 
相關問題