удалить папку, содержащую thumbs.db - PullRequest
1 голос
/ 19 марта 2012

Иногда я не могу удалить папку, потому что она содержит thumbs.db.У меня много папок (которые также содержат изображения), и мне нужно будет переместить их в другое место и удалить исходную папку.Но я получаю эту ошибку: папка не может быть удалена, потому что "thumbs.db" используется другим процессом.Перемещение и удаление производится в c #, и сейчас он пропускает удаление папок с файлом thumbs.db, что приводит к множеству пустых папок.Есть ли способ удалить папку, даже если она имеет этот файл?

Ответы [ 3 ]

4 голосов
/ 19 марта 2012

отправляю свой комментарий в качестве ответа, потому что он гораздо удобнее для чтения:

Вы можете отключить создание этих файлов: в Редакторе реестра перейдите на HKEY_CURRENT_USER \ Software \ Microsoft \ Windows\ CurrentVersion \ Policies \ Explorer и установите значение записи NoThumbnailCache равным 1.

Если у вас нет этой записи, просто создайте ее (DWORD 32).

Для Win 7 Ultimate / Professional версия: HKEY_CURRENT_USER \ Программное обеспечение \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Advanced

DisableThumbnailCache (также DWORD)

Чтобы удалить все уже существующие файлы, создайте пакетный файл со следующим содержимым:

cd c:\

del /s /q thumbs.db

и запустите его от имени администратора

2 голосов
/ 19 марта 2012

Узнайте, кто блокирует

Первое, что вы должны сделать, это выяснить, какой процесс удерживает блокировку. Вы можете использовать Unlocker , чтобы узнать это.

Если вы не можете убить, контролировать или выйти из этого процесса

Вы можете пометить файлы для удаления. Они будут удалены при следующем запуске. Используйте 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);
0 голосов
/ 07 января 2019

В моем случае помогло простейшее решение, однако я знаю, что оно не поможет каждый раз.

  1. Закрыть проводник (это должно разблокировать файл)
  2. Откройте снова и попробуйте удалить папку.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...