Как определить кто заблокировал файл

Обновлено: 06.07.2024

На общедоступном сетевом ресурсе могут возникать ошибки доступа к файлам. Причиной этому является некорректно завершенная сессия пользователя, ошибки в работе ПО или просто кто-то открыл файл и не закрывает его. В такой ситуации файл оказывается заблокированным и не доступен для работы другим пользователям.

Решить проблему доступа к файлу можно путем закрытия сеансов использующих этот файл. В этой статье я расскажу как определить кто открыл файл в сетевой папке и как закрыть это подключение.

Рассмотрим два способа:

  1. Через оснастку "Управление компьютером" консоли управления Windows;
  2. При помощи утилиты командной строки - Openfiles.

1 способ. Получаем список открытых файлов с помощью оснастки "Управление компьютером".

Для получения списка открытых файлов на файловом сервере воспользуемся оснасткой консоли "Управление компьютером". Для запуска оснастки нажимаем сочетание клавиш "Win + R" и набираем название оснастки "compmgmt.msc".


В иерархии оснастки переходим /Управление компьютером/Служебные программы/Общие папки/Открытые файлы.

В правой части оснастки появится список открытых файлов. Здесь можно увидеть имя пользователя открывшего файл, количество блокировок и режим доступа к файлу.


Закрываем файл. Чтобы закрыть сетевой файл открытый другим пользователем находим его в списке и в контекстном меню выбираем пункт "Закрыть открытый файл".


2 способ. Просмотр открытых файлов через командную строку утилитой Openfiles.

Утилита Openfiles дает нам более широкие возможности по поиску и закрытию заблокированных файлов.

C помощью openfiles можно просмотреть список открытых файлов на сервере удаленно. Для этого открываем командную и запускаем утилиту с параметрами.

где
/Query - показывает все открытые файлы,
/s - определяет имя удаленного компьютера.

В случае, когда необходимо указать логин и пароль пользователя для подключения к удаленному компьютеру, задаются параметры: /u - логин пользователя, /p - пароль пользователя.

По-умолчанию список файлов показан в формате таблицы, но есть параметры позволяющие изменить формат вывода:

/fo csv - выводит список в формате csv с разделителем запятая;
/fo list - показывает открытые файлы в формате списка;
/fo table - формат таблицы.

Определяем кто открыл сетевой файл.

Чтобы найти пользователя, который открыл и заблокировал нужный нам файл запускаем Openfiles с командой find.

в команде find указан параметр /i, чтобы поиск был регистронезависимым.

После того когда мы узнали имя пользо

Закрываем заблокированный сетевой файл.

Закрыть открытый файл можно по id сессии таким способом:

Закрыть все сетевые подключения к файлам и папкам, которые открыл пользователь BadUser:

Закрыть все файлы и директории открытые в режиме чтение/запись:

Закрыть все подключения к директории с именем "c:\myshare":

Чтобы сбросить все сессии на удаленном сервере FileServer, которые открыл пользователь domain\baduser, независимо от id сессии:

Как я могу узнать, какой процесс блокирует файл или папку в Windows?

Например, при попытке удалить папку Windows сообщает об этом:

Происходит то же самое с файлом, но как мне узнать, какая программа или приложение использует его в настоящее время и не позволяет мне удалить файл или папку?

Для Windows 7, 8 и 10 вы можете использовать встроенный Resource Monitor для этого.

В случае, если это не очевидно, когда вы нашли дескриптор, вы можете определить процесс, посмотрев на столбец Image и / или PID.

Затем вы можете закрыть приложение, если вы можете это сделать, или просто щелкнуть правой кнопкой мыши по строке, и вы получите возможность убить процесс прямо здесь. Очень просто!

Скриншот монитора ресурсов

Microsoft/SysInternals Process Explorer - выберите "Найти"> "Найти дескриптор" или "DLL". В текстовом поле «Обрабатывать или подстрока DLL:» введите путь к файлу (например, «C:\path\to\file.txt») и нажмите "Поиск". Все процессы, которые имеют открытый дескриптор этого файла, должны быть перечислены.

WhoLockMe - расширение для проводника, которое добавляет опцию контекстного меню

NB WhoLockMe по- видимому, не работает с Win 10 ( по крайней мере , я не смог зарегистрировать его с любым из 32- или 64-разрядных версий regsvr32.exe).

Взгляните на Process Explorer ( procexp.exe ).

Из его введения:

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

Перейдите в Find, Find Handle или DLL .. или просто нажмите Ctrl + F.

Введите описание изображения здесь

Введите имя файла и нажмите Поиск.

Введите описание изображения здесь

Process Explorer перечислит все процессы, которые имеют дескриптор открытого файла. Нажмите на запись, чтобы сфокусировать процесс в главном окне.

Введите описание изображения здесь

При желании вы можете даже закрыть ручку вручную через нижнюю панель ( Ctrl + L ):

Введите описание изображения здесь

В команде openfiles должна быть включена поддержка локальных файлов, для этого нужно запустить openfiles /local on и перезапустить.

LockHunter может разблокировать любые обработчики, которые могли заблокировать ваши файлы или папки. В отличие от аналогичных бесплатных программ, он поддерживает как 32-разрядные, так и 64-разрядные версии Windows.


Тем не менее, UnlockIT - невероятно полезная программа, которая предоставляет базовую функциональность, которая критически отсутствует в Windows. Это один из стандартных наборов утилит, который я устанавливаю на все компьютеры с Windows, на которых работаю.

Здесь было мое открытие и решение.

Я даже пытался использовать UNLOCKER, который оказался бесполезным.

У меня проблема была с Memeo Autosync Backup

По-видимому, этот процесс резервного копирования оставляет достаточно "призрачного файла". Этот "призрачный файл" будет появляться всякий раз, когда я буду ALT-TAB на моем компьютере (Windows Professional XP), то есть я вижу, что ДВА ПРОГРАММЫ MS Excel работают, когда у меня только ОДНА видимая, на моей панели задач.

Впоследствии я продолжал видеть уведомление Memeo о "синхронизации" и выход из программы.

мы используем SVN server 1.4 (я думаю) с клиентами, являющимися либо клиентом командной строки, либо TortoiseSVN.

клиент командной строки показывает владельца блокировки с командой "svn info".

в TortoiseSVN вы можете увидеть владельца блокировки в контекстном меню " свойства "(вкладка"subversion").

использовать svn status --show-updates открыть блокировки файлов. В следующем примере Салли обнаруживает, что на изюме есть замок.формат jpg.

если вы знаете замок, вы можете использовать svn -info чтобы узнать, кто установил замок. Примечание "владелец замка" ниже:

используя функцию РЕПО-браузера TortoiseSVN есть столбец блокировки, который показывает пользователя, который заблокировал файл.

щелкните правой кнопкой мыши на локальной рабочей копии - > TortoiseSVN-> repo-browser.

шаги для проверки:

Правой Кнопкой Мыши на файл/папку, на которой вы хотите определить замком

перейдите в Параметры TortoiseSVN >> РЕПО-браузер

откроется новое окно, и вы получите представление таблицы

столбец блокировки в таблице покажет, у кого есть блокировка

  1. щелкните правой кнопкой мыши файл, выберите TortoiseSVN, затем проверьте наличие изменений
  2. нажмите Проверить репозиторий
  3. прокрутите вправо, чтобы увидеть колонки

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

У меня также была эта проблема, касающаяся .файлы aux. Решение / проблема в моем случае заключалась в том, что никакие подкаталоги не имеют большей глубины, чем 1. Если вы хотите использовать это, подкаталоги в папке tmp должны существовать. например. -- >src - > введение- > введение.текс требует -- >tmp-- > введение-->введение.вспомогательный ******

подчеркнутый каталог должен существовать. Так что в случае управления subversion также фиксирует структуру каталогов в папке tmp (без *.aux) файлы.

Вот проблема: сетевой ресурс находится на NAS, поэтому я не могу войти в систему. Мне нужен инструмент, чтобы узнать удаленно, кто блокирует файл. Невозможно перезагрузить NAS каждый раз, потому что есть несколько пользователей.

Handle.exe, Process Explorer и PsFile, по-видимому, ограничены файлами на локальной машине, поэтому они не работают для меня.

На всякий случай кто-то ищет решение для системы на базе Windows или NAS:

В Windows есть встроенная функция, которая показывает, какие файлы на локальном компьютере открыты/заблокированы удаленным компьютером (который имеет файл, открытый через общий ресурс файла):

Там вы можете даже сильно закрыть файл.

На серверах Windows 2008 R2 у вас есть два способа просмотра файлов, открытых и закрывающих эти соединения.

Управление доступом и хранением

Диспетчер серверов > Роли > Файловые службы > Управление общим хранилищем и хранилищем > щелкните правой кнопкой мыши на SaSM > Управление файлом Open

Через OpenFiles

CMD > Openfiles.exe/query/s SERVERNAME

PsFile работает на удаленных компьютерах. Если моя учетная запись уже имеет доступ к удаленному общему ресурсу, я могу просто ввести:

Это довольно сложно, так как в моем случае этот удаленный общий ресурс монтируется как Z: на моем локальном компьютере, но psfile идентифицирует пути, как они определены на удаленном файловом сервере, что в моем случае я: (ваш будет будь другим). Мне просто пришлось расчесывать результаты моего первого запуска psfile, чтобы увидеть некоторые из путей, которые он вернул, а затем запустить снова с частичным путем, чтобы сузить результаты.

Опционально PsFile позволит вам указать учетные данные для удаленного доступа, если вам нужно предоставить их для доступа.

Наконец, небольшой совет: если кто-то нажимает на файл в Проводнике Windows и разрезает или копирует файл с намерением вставить его в другое место, это действие также блокирует файл.

Это может быть особенно полезно при использовании общей базы данных MS Access.

Частичный ответ: с помощью Process Explorer вы можете просматривать дескрипторы сетевого ресурса , открытого с вашего компьютера.

Читайте также: