Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在C#中进行不可阻挡的删除?(紧凑框架)_C#_File Io_Compact Framework_Delete File - Fatal编程技术网

是否可以在C#中进行不可阻挡的删除?(紧凑框架)

是否可以在C#中进行不可阻挡的删除?(紧凑框架),c#,file-io,compact-framework,delete-file,C#,File Io,Compact Framework,Delete File,给定一个文件夹,我要确保删除该目录中的所有文件。 我知道可能存在IOExceptions或Access Denied错误,但如何将它们放在一边,继续删除实际上可以删除的文件?这可能吗? 请告诉我从哪里开始 IOExceptions或Access Denied错误,但如何将它们放在一边并继续删除 嗯?如果您有IO问题或无法访问这些文件,则无法删除它们。它们是例外。他们告诉你“嘿,这出了问题,原因就在这里”。它们不是礼貌的警告消息,您可以忽略它们,它们是您的删除首先不起作用的原因。如果您循环浏览目录

给定一个文件夹,我要确保删除该目录中的所有文件。 我知道可能存在IOExceptions或Access Denied错误,但如何将它们放在一边,继续删除实际上可以删除的文件?这可能吗? 请告诉我从哪里开始

IOExceptions或Access Denied错误,但如何将它们放在一边并继续删除


嗯?如果您有IO问题或无法访问这些文件,则无法删除它们。它们是例外。他们告诉你“嘿,这出了问题,原因就在这里”。它们不是礼貌的警告消息,您可以忽略它们,它们是您的删除首先不起作用的原因。

如果您循环浏览目录中的文件并删除try/catch中的每个文件,那么即使出现异常,您也可以继续。如果您试图删除整个目录,那么一旦失败,它就会失败

编辑:按要求编码

private void DeleteFiles(DirectoryInfo Directory)
    {
        bool AllFilesDeleted = true;
        foreach(FileInfo oFile in Directory.GetFiles())
        {
            try
            {
                oFile.Delete();
            }
            catch (Exception ex) { AllFilesDeleted = false; }
        }
        foreach (DirectoryInfo oDirectory in Directory.GetDirectories())
        {
            DeleteFiles(oDirectory);
        }

        if (AllFilesDeleted)
        {
            try
            {
                Directory.Delete();
            }
            catch (Exception ex){}
        }
    }

如果要删除所有可以删除的文件,可以创建一个文件列表(针对子方向递归),然后分别删除它们,跳过引发异常的文件

回答递归搜索问题:

void delete(DirectoryInfo di) {
 foreach(DirectoryInfo di2 in di.GetDirectories()) {
  delete(di2);
 }
 foreach(FileInfo fi in di.GetFiles()) {
  fi.Delete();
 }
}

…正如上面所建议的,尝试…围绕各个部分进行捕获将解决无法删除某些文件的问题。

如果您在@will a建议的内容中稍微更改一下顺序,并添加一行以删除目录本身,应该可以做到这一点。差不多

        static void delete(DirectoryInfo di)
        {
            foreach (FileInfo fi in di.GetFiles())
            {
                try
                {
                    fi.Delete();
                }
                catch (Exception)
                {

                }
            }

            foreach (DirectoryInfo di2 in di.GetDirectories())
            {
                delete(di2);
            }
            try
            {
                di.Delete();
            }
            catch (Exception)
            {
            }

        }

它应该会清除空文件夹

对不起,我想你误解了我的意思。我想要的是,如果出现异常(这意味着该文件无法删除),请将其放在一边(不要删除),但继续处理其他文件:)我认为是您的标题中的“不可阻挡”部分最让我失望;)不幸的是,无法重载Directory.GetFiles以接受第三个选项SearchOption.AllDirectories in compact framework:(可以通过递归实现,请参见示例:但是如何在所有子目录中递归获取所有文件?Thanx很多:)这就成功了!已删除所有文件:)但未删除空文件夹;)我可以处理空目录:)