C# 无法同时删除文件和目录

C# 无法同时删除文件和目录,c#,compact-framework,delete-file,C#,Compact Framework,Delete File,我正在研究CompactFramework 3.5。我可以使用File.delete()删除文件,也可以使用我的方法删除目录 问题是:我只能调用File.Delete()方法或我的目录删除方法(名称为DD)。它们都能工作,但不能一起工作。这是我的密码: using System; using System.Diagnostics; using System.IO; using System.Linq; using System.Collections.Generic; using System.

我正在研究CompactFramework 3.5。我可以使用
File.delete()
删除文件,也可以使用我的方法删除目录

问题是:我只能调用
File.Delete()
方法或我的目录删除方法(名称为DD)。它们都能工作,但不能一起工作。这是我的密码:

using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Collections.Generic;
using System.Windows.Forms;

namespace Reset_Client
{
static class Program
{
    static void Main()
    {
        string path = @"\Storage Card\deneme\";



        File.Delete(path + "Agentry.ini");
        File.Delete(path + "Agentry.app");
        File.Delete(path + "Agentry.usr");
        //DF(path);
        DD(path);


        MessageBox.Show("Cihaz resetlendi!");
    }

    public static void DD(string mainPath)
    {
        try
        {
            DeleteDirectory(mainPath + "CRM");
            DeleteDirectory(mainPath + "BHTS");
            DeleteDirectory(mainPath + "IMAGES");
            DeleteDirectory(mainPath + "STYLES");
            DeleteDirectory(mainPath + "TABLES");
            DeleteDirectory(mainPath + "LOG");

        }
        catch (IOException e)
        {
            DD(mainPath);
        }
    }
    //public static void DF(string mainPath)
    //{
    //    try
    //    {
    //        DeleteFile(mainPath + "Agentry.ini");
    //        DeleteFile(mainPath + "Agentry.app");
    //        DeleteFile(mainPath + "Agentry.usr");
    //    }
    //    catch (IOException e)
    //    {
    //        DF(mainPath);
    //    }
    //}


    public static void DeleteDirectory(string target_dir)
    {
        FileInfo fileInfo = new FileInfo(target_dir);
        FileAttributes attributes = fileInfo.Attributes;

        if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
        {
            // set the attributes to nonreadonly
            fileInfo.Attributes &= ~FileAttributes.ReadOnly;
        }

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

        foreach (string file in files)
        {
            File.Delete(file);
        }

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

        Directory.Delete(target_dir, false);
    }

    public static void DeleteFile(string target_dir)
    {
        FileInfo fileInfo = new FileInfo(target_dir);
        FileAttributes attributes = fileInfo.Attributes;

        if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
        {
            // set the attributes to nonreadonly
            fileInfo.Attributes &= ~FileAttributes.ReadOnly;
        }



    }
}
}
以下可能是您的问题


通常,您只能删除空目录。您的
DD
函数必须沿着目录路径递归,找到所有文件,并调用
File.Delete
,然后再删除包含它们的目录。

您可以使用directory.Delete(target\u dir,true)替换DD方法直接删除目录。第二个参数为true,表示递归。
还有一点。如果发生任何IO异常。DD方法捕获异常并再次调用DD方法。这将是一个死循环。

这是我的一个剪贴画。我不记得是从什么地方得到的,还是我写的。这应该做你想做的事情

 public void ClearFolder(string folderName)  
 {  
   DirectoryInfo dir = new DirectoryInfo(folderName);  
   foreach (FileInfo fi in dir.GetFiles())  
   {  
     fi.Delete();  
   }  
   foreach (DirectoryInfo di in dir.GetDirectories())  
   {  
     ClearFolder(di.FullName);  
     di.Delete();  
   }  
 }  
我会像这样尝试,看看是否有效

using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Collections.Generic;
using System.Windows.Forms;

namespace Reset_Client
{
static class Program
{
    static void Main()
    {
        string path = @"\Storage Card\deneme\";
        File.Delete(path + "Agentry.ini");
        File.Delete(path + "Agentry.app");
        File.Delete(path + "Agentry.usr");
        //DF(path);
        DD(path);
        MessageBox.Show("Cihaz resetlendi!");
    }

    public static void DD(string mainPath)
    {
        try
        {
            ClearFolder(mainPath + "CRM");
            ClearFolder(mainPath + "BHTS");
            ClearFolder(mainPath + "IMAGES");
            ClearFolder(mainPath + "STYLES");
            ClearFolder(mainPath + "TABLES");
            ClearFolder(mainPath + "LOG");

        }
        catch (IOException e)
        {
            DD(mainPath);
        }
    }

    public void ClearFolder(string folderName)  
    {  
        DirectoryInfo dir = new DirectoryInfo(folderName);  
        foreach (FileInfo fi in dir.GetFiles())  
        {  
            fi.Delete();  
        }  
        foreach (DirectoryInfo di in dir.GetDirectories())  
        {  
            ClearFolder(di.FullName);  
            di.Delete();  
        }  
    }  
}
}

请定义“不一起工作”的主要含义;如果我只调用File.Delete(路径+“Agentry.ini”);File.Delete(路径+“Agentry.app”);Delete(路径+“Agentry.usr”);它删除文件。或者,如果我只调用DD(path),它就会工作;但是当我调用所有这些文件时,它都不起作用。你能扩展到“不起作用”吗?它是否会引发异常,错误消息是什么,等等?没有错误消息,DD方法会删除目录,但File.Delete()方法不会删除这3个文件。