C# 删除不可访问的文件和文件夹
我的问题是我必须删除我自己创建的机器上的文件和文件夹。没有什么特别的,但我使用的是不同的工具(TortoiseSVN、特殊定制工具等),我不能保证它们在关闭我自己的应用程序后都会关闭。(例如:TortoiseSVN始终运行) 我在AppData/Local/Temp的Windows Temp文件夹中工作,可能病毒扫描程序也在阻止该目录 我已经尝试过的:C# 删除不可访问的文件和文件夹,c#,tortoisesvn,C#,Tortoisesvn,我的问题是我必须删除我自己创建的机器上的文件和文件夹。没有什么特别的,但我使用的是不同的工具(TortoiseSVN、特殊定制工具等),我不能保证它们在关闭我自己的应用程序后都会关闭。(例如:TortoiseSVN始终运行) 我在AppData/Local/Temp的Windows Temp文件夹中工作,可能病毒扫描程序也在阻止该目录 我已经尝试过的: DirectoryInfo.Delete(true):--IOException Foreach FileInfo和DirectryInfo.D
IOException
IOException
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。这将是我最后的机会。但是,比如说乌龟,我不知道它在杀死后是否还能工作?在我有其他选择之前,我宁愿不杀掉其他的任务和琐碎的东西。如果是临时的,你为什么这么在乎呢?在有人开始清理磁盘之前,文件一直在那里存放一段时间是很正常的。好吧,这不像我想的那么清楚:我必须删除文件!这是非常重要的!