我的问题是我必须删除机器上的文件和文件夹,这是我自己创建的。没什么特别的,但是我使用了不同的工具(TortoiseSVN,特殊的自定义工具等等),我无法保证在关闭我自己的应用程序后它们全部关闭。 (例如:TortoiseSVN始终运行)
我在AppData / Local / temp的Windows Temp文件夹中工作,也许Virus-Scanner也阻止了该目录。
我已经尝试过:
IOException
IOException
在我开始创建 Windows服务以删除所有文件之前,我希望我们能找到另一种解决方案。
我的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(); });
}