2013-01-02 53 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); 
    } 
} 
相关问题