none
Получить список файлов, открытых в системе (windows) RRS feed

  • Вопрос

  • Задумал сделать программу для выполнения бэкапа файлов. Из предлагаемого на просторах паутины мало что устраивает по тем или иным причинам.

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

    Вывод списка открытых файлов реализован в системе, но примеров, как это сделано, я не нашел, кроме упоминания, что это делается с применением WinAPI.

    3 ноября 2017 г. 2:39

Ответы

Все ответы

  • Системные утилиты предположительно используют NetFileEnum для получения удаленно открытых файлов и  NtQuerySystemInformation для получения локально открытых файлов.

    Однако, получение всех открытых файлов в системе - довольно затратная операция и обычно не нужна. Обычно более полезно получить информацию только о тех файлах, с которыми программа реально собирается работать. Это можно сделать с помощью функций RmRegisterResources / RmGetList из Restart Manager API. Пример получения списка процессов, открывших указанный файл.

    3 ноября 2017 г. 4:14
  • На самом деле "всех" открытых файлов должно быть не так уж и много... ибо запуск программы предполагается на сервере в вечерне-ночное время, когда периферийные компы отключены... Просто нужна проверка "на всякий случай", если какому-нибудь ударнику труда вздумается поработать позднее определенного времени или забыть выключить комп. Локально файлы почти не открываются.
    3 ноября 2017 г. 4:30
  • Локально файлов открывается очень много даже без вашего ведома. У меня команда openfiles /query > file.txt выдает файл на 900+ строк (большинство - шрифты и всякие временные файлы).

    Но если нужны только удаленные то это легко должно делаться через NetFileEnum. Вот тут пример есть: https://www.codeproject.com/Articles/6426/WebControls/

    3 ноября 2017 г. 4:40
  • Печалька :( Пример на C++... Было дело пару лаб на нем делал лет несколько назад, но пытаюсь освоить C#... будем пытаться скрестить Сишек. 

    А Ваш пример openfiles можно попросить на посмотреть? Возможно я надумаю проверять и локально открытые файлы.

    3 ноября 2017 г. 4:56
  • Вот тут посмотрите для c# http://www.pinvoke.net/default.aspx/netapi32.NetFileEnum

    openfiles это стандартная системная утилита, в system32 лежит. 

    Можно кстати ее вывод парсить, если вам так проще будет.

    3 ноября 2017 г. 5:22
  • Спасибо за инфу! Пойду пробовать... О результатах доложу :)
    3 ноября 2017 г. 5:33