C# 删除不可访问的文件和文件夹

C# 删除不可访问的文件和文件夹,c#,tortoisesvn,C#,Tortoisesvn,我的问题是我必须删除我自己创建的机器上的文件和文件夹。没有什么特别的,但我使用的是不同的工具(TortoiseSVN、特殊定制工具等),我不能保证它们在关闭我自己的应用程序后都会关闭。(例如:TortoiseSVN始终运行) 我在AppData/Local/Temp的Windows Temp文件夹中工作,可能病毒扫描程序也在阻止该目录 我已经尝试过的: DirectoryInfo.Delete(true):--IOException Foreach FileInfo和DirectryInfo.D

我的问题是我必须删除我自己创建的机器上的文件和文件夹。没有什么特别的,但我使用的是不同的工具(TortoiseSVN、特殊定制工具等),我不能保证它们在关闭我自己的应用程序后都会关闭。(例如:TortoiseSVN始终运行)

我在AppData/Local/Temp的Windows Temp文件夹中工作,可能病毒扫描程序也在阻止该目录

我已经尝试过的:

  • DirectoryInfo.Delete(true):--
    IOException
  • Foreach FileInfo和DirectryInfo.Delete----相同的结果=>
    IOException
  • 将文件和文件夹保存在列表中,然后单击“删除”-这是最好的结果,但如果用户先关机,文件和文件夹将保留在临时状态
  • 通过DllImport导入--但在重新启动后不会删除
  • 尝试每个文件并折叠(先折叠文件)--结果相同,不删除
  • 在我开始创建一个Windows服务来删除所有文件之前,我希望我们能找到另一个解决方案

    PS:在Windows 10 64位上测试并在C#WPF Visual Studio中编写,教授2017 我的moveFileEx代码:

    internal enum MoveFileFlags
        {
            MOVEFILE_REPLACE_EXISTING = 1,
            MOVEFILE_COPY_ALLOWED = 2,
            MOVEFILE_DELAY_UNTIL_REBOOT = 4,
            MOVEFILE_WRITE_THROUGH = 8,
            MOVEFILE_CREATE_HARDLINK_RESERVER = 16,
            MOVEFILE_FAIL_IF_NOT_TRACKABLE = 32
        }
        [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        internal static extern bool MoveFileEx(string lpExistingFileName, string lpNewFileName, MoveFileFlags dwFlags);
    
        public static void MoveFileUntilReboot(this FileInfo source , FileInfo Destination)
        {
            MoveFileEx(source.FullName, Destination.FullName, MoveFileFlags.MOVEFILE_DELAY_UNTIL_REBOOT);
        }
        public static void DeleteFileUntilReboot(this FileInfo toDelete)
        {
            MoveFileEx(toDelete.FullName, null, MoveFileFlags.MOVEFILE_DELAY_UNTIL_REBOOT);
        }
        public static void MoveDirUntilReboot(this DirectoryInfo source, DirectoryInfo Destination)
        {
            MoveFileEx(source.FullName, Destination.FullName, MoveFileFlags.MOVEFILE_DELAY_UNTIL_REBOOT);
        }
        public static void DeleteDirUntilReboot(this DirectoryInfo source)
        {
            if (source == null) return;
            if (source.Exists == false) return;
    
    
            Parallel.ForEach(source.GetDirectories(), (dir) => { dir.DeleteDirUntilReboot(); });
    
            Parallel.ForEach(source.GetFiles(), (File) => { File.DeleteFileUntilReboot(); });
    
        }
    

    上面有一些代码,用于查找哪些进程打开了特定文件。。另外,沃格也有一个更具体的原因。如果没有看到代码的一行,没有人能够告诉您代码可能出了什么问题。话虽如此,请将您的MoveFile代码与此进行比较:到目前为止,我一直在避免杀死其他任务和thready。这将是我最后的机会。但是,比如说乌龟,我不知道它在杀死后是否还能工作?在我有其他选择之前,我宁愿不杀掉其他的任务和琐碎的东西。如果是临时的,你为什么这么在乎呢?在有人开始清理磁盘之前,文件一直在那里存放一段时间是很正常的。好吧,这不像我想的那么清楚:我必须删除文件!这是非常重要的!