Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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# 如何调试使用File.Delete和directory.Delete删除目录的问题_C#_Asp.net Mvc 3_Debugging - Fatal编程技术网

C# 如何调试使用File.Delete和directory.Delete删除目录的问题

C# 如何调试使用File.Delete和directory.Delete删除目录的问题,c#,asp.net-mvc-3,debugging,C#,Asp.net Mvc 3,Debugging,这个很难调试。让我们从我的情况开始: 我有一个ASP.NETMVC3网络应用程序,它是用C#开发的,使用的是.NET4。系统的一部分允许用户上传zip文件。这样做很好,并且保存了zip文件。还有一个Windows服务,它会定期查找新的zip文件,提取它们,做一些工作,然后将它们重新压缩备份。(我使用System.IO.Compression进行压缩)。这部分都很好,经过处理后,我得到了一个类似的结构 Object1Folder \_ Input.zip \_ ExtractedFolder

这个很难调试。让我们从我的情况开始:

我有一个ASP.NETMVC3网络应用程序,它是用C#开发的,使用的是.NET4。系统的一部分允许用户上传zip文件。这样做很好,并且保存了zip文件。还有一个Windows服务,它会定期查找新的zip文件,提取它们,做一些工作,然后将它们重新压缩备份。(我使用
System.IO.Compression
进行压缩)。这部分都很好,经过处理后,我得到了一个类似的结构

Object1Folder
 \_ Input.zip
 \_ ExtractedFolder
 \_ Output.zip
还有一个功能允许用户删除项目,要求删除对象文件夹,在本例中为“Object1Folder”。因为我需要删除所有子文件夹和文件,所以我有以下递归函数来完成这项工作

public static void DeleteDirectory(string directoryPath)
{
    string[] files = Directory.GetFiles(directoryPath);
    string[] directories = Directory.GetDirectories(directoryPath);

    foreach (string file in files)
    {
        File.SetAttributes(file, FileAttributes.Normal);
        File.Delete(file);
    }

    foreach (string directory in directories)
    {
        DeleteDirectory(directory);
    }

    Directory.Delete(directoryPath, true);
}
这最初被称为像

DeleteDirectory("C:\\Objects\\Object1Folder");
但它不起作用!首先,没有抛出错误,代码似乎成功执行,这很烦人。但结果是只删除了“Input.zip”文件。“ExtractedFolder”和“Output.zip”文件仍保留

据我所知,密码是可靠的。我看不出它不尝试删除剩余的文件和文件夹。不幸的是,我们在目标服务器上没有安装VS,因此我无法单步检查代码并检查它是否试图删除它们。请指出,您是否认为这是一个潜在的问题

到目前为止,我最好的猜测是这是某种权限问题。有趣的是(也许)当我手动清理问题时(即windows资源管理器删除“Object1Folder”会显示“Denied”,并要求我用管理员权限按钮确认它所做的事情

我知道你们都很难解决这个问题,但我正在寻找我应该检查的东西来尝试解决这个问题。我应该确保什么样的东西有正确的权限?它们需要什么权限?有没有一个好方法让我调试这个问题?如果其他东西拥有这些文件(可能是从Windows服务的提取过程中),如何检查这是否是问题所在

有关该服务器的一些信息可能会有所帮助:该服务器正在运行带有service pack 1的64位“Windows server 2008 R2数据中心”。该web应用程序分配了一个用户,该用户同时是“用户”和“IIS_IUSR”的成员


如果有人需要额外信息,请告诉我。

查看服务器上的事件日志;您可能会在那里发现异常\错误消息

可以考虑使用<代码>目录>删除(路径,true)< />代码>以便在一个调用中删除文件夹及其所有内容(除非我不正确理解您的代码)。 查看正在使用的文件。如果某个文件正在使用,操作系统将无法删除它。因此,请确保正确释放所有文件


最后,您不能强制文件不被使用,因此您可能会编写一个每晚运行的干净脚本来删除不需要的文件和文件夹。

查看服务器上的事件日志;您可能会在那里发现异常\错误消息

可以考虑使用<代码>目录>删除(路径,true)< />代码>以便在一个调用中删除文件夹及其所有内容(除非我不正确理解您的代码)。 查看正在使用的文件。如果某个文件正在使用,操作系统将无法删除它。因此,请确保正确释放所有文件


最后,您不能强制文件不在使用中,因此您可能会编写一个每晚运行的干净脚本来删除不需要的文件和文件夹。

您确实应该为解包的文件使用临时目标文件夹。 当它们被使用时,你可以尝试删除它们,如果删除失败,就留下它们。
对于驻留在iis中的演示文稿应用程序,不应授予写入非临时文件夹的权限。

您确实应该使用临时目标文件夹来保存未打包的文件。 当它们被使用时,你可以尝试删除它们,如果删除失败,就留下它们。
不应将写入非临时文件夹的权限授予驻留在iis中的演示文稿应用程序。

您是否尝试以管理员身份运行解决方案/exe(打开时按住shift键并单击)讨厌。我的意思是,不删除项目-好。不抛出异常或提供反馈-不好。你看了事件日志了吗?你应该看到那里有失败。该文件夹对进程可见吗=@MikeyMouse:这是一个web应用程序,因此没有可运行的exe确保你不会在某个地方吞下异常。@TomTom:没有事件错误,也没有警告NG和信息似乎与web应用程序相关,更不用说特定的文件问题您是否尝试以管理员身份运行解决方案/exe(打开时按住shift键单击)讨厌。我的意思是,不删除项目-好。不抛出异常或提供反馈-不好。你看了事件日志了吗?你应该看到那里有失败。该文件夹对进程可见吗=@MikeyMouse:这是一个web应用程序,因此没有可运行的exe确保你不会在某个地方吞下异常。@TomTom:没有事件错误,也没有警告ngs和信息似乎与web应用程序有关,更不用说具体的文件问题了。毫无疑问,没有事件日志,我只是重新测试了一下,什么也没有创建。我想我有这段代码的最初原因是因为对
目录的一个简单调用。删除
对我不起作用。我实际上是从其他一些SO答案中找到这段代码的。这是吗有没有工具可以用来检查正在使用的文件?我已经检查了我的代码,以及与“output.zip”相关的其他位是对.Net zip函数的一次调用。它似乎无法控制显式处理它可能使用的某些东西。最后,我考虑过一个清理服务,但对我来说这是最后的选择。公平地说,我可能会添加一个,作为一个安全防护。但我不想依赖我自己