C# 删除包含thumbs.db的文件夹

C# 删除包含thumbs.db的文件夹,c#,windows-7,C#,Windows 7,有时我无法删除文件夹,因为它包含thumbs.db。我有很多文件夹(也包含图像),我需要将它们移动到其他位置并删除原始文件夹。但我得到了这个错误:无法删除该文件夹,因为“thumbs.db”正被另一个进程使用。移动和删除是在c#中进行的,现在它将跳过删除具有thumbs.db的文件夹,这将导致大量空文件夹。即使文件夹中有该文件,是否也有办法删除该文件夹?找出谁正在锁定该文件夹 您应该做的第一件事是找到哪个进程持有锁。你可以用它来找出答案 如果你不能杀死、控制或退出这个过程 您可以将文件标记为删除

有时我无法删除文件夹,因为它包含thumbs.db。我有很多文件夹(也包含图像),我需要将它们移动到其他位置并删除原始文件夹。但我得到了这个错误:无法删除该文件夹,因为“thumbs.db”正被另一个进程使用。移动和删除是在c#中进行的,现在它将跳过删除具有thumbs.db的文件夹,这将导致大量空文件夹。即使文件夹中有该文件,是否也有办法删除该文件夹?

找出谁正在锁定该文件夹 您应该做的第一件事是找到哪个进程持有锁。你可以用它来找出答案

如果你不能杀死、控制或退出这个过程 您可以将文件标记为删除。它们将在下次启动时被删除。使用PInvoke并调用
MoveFileEx
将null传入作为目标

您可以将其用于文件夹和文件。将文件夹标记为删除就足够了

此链接包含一些示例代码:

[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
public static extern bool MoveFileEx(string lpExistingFileName, string lpNewFileName, int dwFlags);

public const int MOVEFILE_DELAY_UNTIL_REBOOT = 0x4;

MoveFileEx(filename, null, MOVEFILE_DELAY_UNTIL_REBOOT);

我将我的评论作为答案提交,因为这样更具可读性:

您可以关闭这些文件的创建: 在注册表编辑器中,转到HKEY\U CURRENT\U USER\Software\Microsoft\Windows\CurrentVersion\Policys\Explorer 并将NoThumbnailCache条目的值设置为1

如果没有此条目,只需创建它(DWORD 32)

对于Win 7终极版/专业版: HKEY\U CURRENT\U USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced

禁用ThumbnailCache(也包括DWORD)

要删除所有现有文件,请创建包含以下内容的批处理文件:

cd c:\

del /s /q thumbs.db

并以管理员身份运行它,在我的情况下,最简单的解决方案有帮助,但我知道它不会每次都有帮助

  • 关闭文件资源管理器(这将解锁文件)
  • 再次打开并尝试删除文件夹
  • 在“控制面板”/“文件资源管理器选项”/“视图”中

    • 取消选中“始终显示图标,从不显示缩略图”
    • 取消选中“在缩略图上显示图标”
    在“文件资源管理器”菜单“视图集”中,设置平铺


    对我来说,现在我可以从网络驱动器中删除Thumbs.db,例如Z:\path\Thumbs.db

    AFAIK,win7中的Thumbs.db文件存储在AppData中的某个位置,而不是包含图像的每个文件夹中,不是吗?您是否已经尝试以管理员身份运行您的程序?