Написал на днях одну утилиту и мне она показалась достойной вашего внимания. Захотел поделиться. https://sourceforge.net/projects/filechangeswatcher/

Программа на лету мониторит список файлов, подвергшихся изменению и последние несколько файлов, которые попали в поле зрения программы, хранит в контекстном меню:

image

… чтобы затем пользователь мог открыть месторасположение файла в проводнике Windows:

image

Пример «save» в редакторе иконок

image

Пример «Save» в Excel

image

Идея этого несложного сервиса возникла давно. Когда обратил внимание, как удобно открывать скачанные файлы в Chrome:

image

А вот остальные программы, увы, не дают такой возможности, а это все программы, в которых есть функция «сохранить как»:
Как тут не хватает кнопки «Show in folder»:

image

Ну как мне открыть место куда был сохранён файл? Может я это место две минуты выбирал!? Где «Show in folder»?
image

Непонятно, почему только некоторые браузеры догадались до этой нужной простой функции?

Программа работает под windows, написана на.NET, light–weight, standalone, singlefile, не требует установки, ничего никуда не сохраняет (кроме настроек) и не отправляет. В приложении присутствуют настройки, чтобы вы могли настроить папки для «наблюдения» и другие мелочи, например, автозапуск при старте windows.

Буду рад, если программа будет вам полезна.

Спасибо за внимание. Have Fun.

P.S. Про sysinternals я в курсе ;) И про антивирусы тоже. Программа сделана на базе примера msdn по FileSystemWatcher: https://msdn.microsoft.com/ru-ru/library/system.io.filesystemwatcher.changed(v=vs.110).aspx.
Поделиться с друзьями
-->

Комментарии (37)


  1. Ogoun
    30.05.2016 15:12
    +2

    С FileSystemWatcher стоит быть осторожным, у него были баги с утечкой памяти. По ссылке можно уйти на обсуждение. Возможно уже пофиксили, но в свое время потратил кучу времени пока понял почему мой сервис (24x7) за две недели начинал по 2 гига оперативы выжирать. Помог только анализ профайлером, потому что на библиотеки из .NET думал в последнюю очередь.


    1. AlexZaharow
      30.05.2016 15:19
      +1

      Спасибо за предупреждение. Хоть по вашей ссылке об этом и написано в 2011 году, но microsoft не всегда спешит исправлять тонкие места годами. Надо будет понаблюдать.


  1. imbeat
    30.05.2016 15:18
    +2

    Хотелось бы на исходники взглянуть.
    На https://sourceforge.net/projects/filechangeswatcher/ к сожалению доступен только архивированный *.exe.
    Было бы прекрасно, если бы Вы выложили исходники на github.


    1. Ogoun
      30.05.2016 15:28
      +2

  1. borislav
    30.05.2016 15:53

    Очень нужная утилита, спасибо автору! Внесу пару пожеланий. Ну во-первых уведомления желательно сделать отключаемыми. Второе: надо исключить системные директории из слежения, плюс возможность добавить стандартные папки типа рабочего стола, загрузок, изображений и прочего пользовательского окружения.


    1. AlexZaharow
      30.05.2016 16:11

      Благодарю. :)

      «уведомления желательно сделать отключаемыми» — согласен, потому что, например, при разархивировании, копировании каталогов или сборке проектов их бывает неоправданно много. Я пока не придумал, как сделать этот «момент» более дружелюбным, т.к. он возникает совершенно неожиданно. Может делать ограничения по количеству выводов сообщений за единицу времени?

      «надо исключить системные директории из слежения» — По-умолчанию диск C:\ отключен. Для исключения из наблюдаемых путей есть раздел [FoldersForExceptions]. Вот как он выглядит у меня:
      image
      Т.е. я наблюдаю диски D:\ и F:\ полностью, но при файловых операциях в указанных каталогах программа не реагирует. Чтобы быстрее добавить каталог в исключения я написал контекстное меню проводника:
      image

      «добавить стандартные папки типа рабочего стола, загрузок, изображений и прочего » — Пропишите их в разделе [FoldersForWatch]:
      image
      Но тут есть один баг в компоненте, который читает ini-файл. Он кроказаблит пути с кириллицей и исключает их из наблюдения. Пока не знаю как победить. Так что пока только пути с латинскими буквами.

      Все настройки в разеде «Open Settings»:
      image


      1. Einherjar
        30.05.2016 16:39

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

        Очень просто — не используйте ini, тем более в виде кривых сторонних индусских библиотек. Что за мракобесие в самом деле, чем стандартный app.config не угодил?


        1. AlexZaharow
          30.05.2016 16:52

          Не хотелось писать диалог для настроек. Мне ini как-то тоже не очень, но он как-то менее подвержен внесению ошибок руками, чем редактирование xml напрямую.
          Например, сделать копипасту имени каталога в ini-файл проще, чем выбирать какой-либо каталог стандартными средствами windows в диалоговых окнах или писать руками теги xml.
          Тут уж если и не ini, то json подошёл бы, но он не сишарпабельный :)


          1. Einherjar
            30.05.2016 16:55

            Json вполне сишарпабельный, пишем класс настроек и сериализуем/десериализуем его в файл через стандартный DataContractJsonSerializer или проверенной временем сборкой Newtonsoft.Json


            1. AlexZaharow
              30.05.2016 17:14

              Newton как-то не попадался раньше. Гляну.


      1. borislav
        31.05.2016 07:04

        Интерфейс для отключаемый уведомлений очень простой — галочка в контекстном меню в настройках. Дефолтные папки имхо лучше сделать все за исключением системных типа Windows, AppData и прочих из дефолтных путей, но добавить именно папки пользователя, чтобы установил программу и она сразу работала как надо, ну при желании указал еще другие диски. Тоесть по дефолту следить за всем диском C: кроме системных папок.


  1. AlexZaharow
    30.05.2016 16:14

    Коллеги, я тут нечаянно отменил комментарий «xsikor». Прошу прощения. Вот комментарий:

    >> Немного не логично с точки зрения UI выводить новые файлы сверху вниз т.к. приходится вести мышкой «достаточно» большое расстояние от иконки самого приложения в трее

    Мой ответ:

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


  1. Shoorup
    30.05.2016 16:32

    Однозначно мне такая программа нужна! Сам когда-то хотел что-то подобное сделать, но никак руки не доходили.
    Пожелание к интерфейсу — сделать русский язык:)

    Наверняка под мою хотелку есть уже готовые программы (прошу подсказать если это так). Мне хотелось бы еще некий монитор/лог файлов которые делает например инсталлер. К примеру ставим программу, и в процессе установки в папке Temp появляются и удаляются файлы. Вот сделать бы лог появления, копий этих файлов и историю изменения/удаления.


    1. AlexZaharow
      30.05.2016 16:48

      «Сделать русский язык» — Однозначно! Как «разберусь» с локализацией — сделаю. Постараюсь не откладывать в долгий ящик.

      «Вот сделать бы лог появления, копий этих файлов и историю изменения/удаления.» — за одним каталогом можно следить. Уследить за процессом я цели не ставил. Ваша задача из разряда администрирования. У них точно такие утилиты есть. Правда не все бесплатные. В принципе можно сделать ещё одну секцию, чтобы мониторить всё, что происходит в каталоге без исключения, но можно подумать и сделать по секции с настройками на каталог, но это на будущее.


    1. lafa
      30.05.2016 20:22
      +1

      >Мне хотелось бы еще некий монитор/лог файлов которые делает например инсталлер
      Для windows есть бесплатная утилита FileMon, доступна на technet.
      Позволяет проследить за процессом, что и куда он пишет\читает
      technet.microsoft.com/ru-ru/sysinternals/filemon.aspx


    1. AndrewN
      30.05.2016 22:15

      Uninstall Tool имеет функцию отслеживания вносимых изменений в ФС и в реестр при установке, правда там цель — чтоб при удалении все хвосты подчистить


  1. Darth_Malok
    31.05.2016 10:15

    Большое спасибо за программу. Включил слежение на всех дисках, но использовать буду не для того, для чего использует автор. Мне нравится видеть, как система «живёт») Что где программы сохраняют на диске. Забавно, например, что фаерфокс часто перезаписывает файл SiteSecurityServiceState.txt в профиле пользователя. Почему не хранить это в базе настроек?

    Пожелания:
    — Работа службой.
    — Возможность ведения логов (лучше на sqlite) изменений файлов.
    — Возможность настройки слежки за файлами и записью в лог, но без оповещений. То есть добавить дополнительную настройку FoldersForNotification.

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

    Может подобная программа уже существует?


    1. AlexZaharow
      31.05.2016 10:24

      Пожалуйста.

      «Было бы забавно в конце рабочего дня или рабочей недели посмотреть статистику изменения файлов.» — Есть журнал логов Windows, надо только настроить его нормально, чтобы собирать статистику. Но он пухнет так, что мама не горюй. :O

      Проблема сбора статистики по изменениям файлов имеет определённую проблему. Некоторые приложения, например, не в суе будет помянутый MS Office, не просто сохраняет файлы. Он сначала создаёт временный, потом удаляет старый и пересоздаёт новый файл со старым именем. Некоторые программы пишут в файл по два раза при сохранении и т.д… Поэтому собранная статистика будет далека от реального положения дел.

      «записью в лог, но без оповещений» — пока у приложения чёткая цель — оповещать о текущих изменениях. Поэтому иногда стоит остановиться, чтобы не писать функции ради прикола. Можно слишком увлечься не туда… Надеюсь вы понимаете, что это чревато для личной жизни :)

      Но на программу у меня есть планы.


    1. Protos
      31.05.2016 15:47

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


      1. AlexZaharow
        01.06.2016 15:46

        Тут возможны сложности не технического плана. Если даже предположить, что у вас есть база паролей, то может оказаться, что в файлах пользователя уже хранятся пароли, которые были введены до того, как вы стали мониторить файлы. А пока записи в файл не произойдёт, то вы и не узнаете, что там лежит пароль.
        Мне кажется, что тут надо повесить индексатор на каталоги/диски (типа ElasticSearch+плагин) и периодически мониторить пароли по всему содержимому. Я бы сам хотел так сделать, но это будет непросто. Помните канувшего в лету Google Desktop Search? Вот классная штука была! Жаль что на новых windows серверах она не запускается.


        1. slavius
          02.06.2016 09:04

          На WinServ2008 пока работает такой поиск от Yandex`а. На новых — 2016?


  1. Protos
    31.05.2016 15:45

    с сетевыми папками такое работать не будет как я понимаю?


    1. AlexZaharow
      31.05.2016 21:20

      Да, точно. Падало на определении иконки для сетевого файла, хотя изменение мониторилось. Исправил. Скачайте новую версию.

      image


      1. Protos
        01.06.2016 04:25

        сегодня точно попробую, надо настройку еще сделать: копировать файл в папку при изменении.
        как еще одно применение, мониторим список, если хоть один из файлов из списка изменился блокировать рабочую станцию (лучше завершение сеанса) — актуально критичных компьютеров за которыми операторы работают, в банках это АРМ КБР, ПТК ПСД


      1. Protos
        01.06.2016 04:28

        сегодня точно попробую, надо настройку еще сделать: копировать файл в папку при изменении.
        как еще одно применение, мониторим список, если хоть один из файлов из списка изменился блокировать рабочую станцию (лучше завершение сеанса) — актуально критичных компьютеров за которыми операторы работают, в банках это АРМ КБР, ПТК ПСД


  1. ljovcheg
    31.05.2016 21:35

    Отличная программулинка получилась. Вроде мелочь, а оказывается, что не хватало.
    Из пожеланий: при клике на бабл — открытие папки с файлом, что бы не идти в контектное меню ради только что изменённого файла


    1. AlexZaharow
      31.05.2016 21:40

      Спасибо.
      Я подумаю на открыванием по нажатию, потому что обычно нажимают на надоедливые баллоны, чтобы они закрылись. Я не нашёл как сделать на баллон кнопку «закрыть» (везде пишут «как», но вот у меня нет такой настройки, поэтому, как только выясню — поэкспериментирую с этим). Пока — скачайте 1.0.7 — обновил до наблюдения за сетевыми путями.


  1. Shoorup
    01.06.2016 08:09

    Не знаю как у других, а у меня заметно подтормаживает приложение при клике в трее. Возможно такого рода программу надо было писать не на .NET… (ИМХО).
    Еще из пожеланий: открытие настройки программы при двойном клике (ЛКМ) на иконке в трее. Настройки кстати хорошо бы не в ini файле сделать, а по нормальному settings в диалоговом окне.
    А почему в автозагрузке программа называется stroiproject?
    Насчет кликания на бабл поддерживаю. Тоже кликаю и жду открытия папки с целевым файлом.


    1. AlexZaharow
      01.06.2016 09:49

      stroiproject — это я начинал эту программу из одного старого проекта, вот его namespace и остался. Сейчас уже убрал.

      «заметно подтормаживает приложение при клике в трее» — вполне возможно. Тут много моментов. Во первых — проверка существования файла. Во вторых — чтение иконки файла (как-то не задумывался, что она тоже требует ресурсов). Буду чинить. Отпишусь, когда сделаю.


    1. AlexZaharow
      01.06.2016 09:53

      Правил, но истекло время…

      «заметно подтормаживает приложение при клике в трее» — вполне возможно. Тут много моментов. Во первых — проверка существования файла. Во вторых — чтение иконки файла (как-то не задумывался, что она тоже требует ресурсов. Первое, что приходит в голову — сделать кеш иконок). Буду чинить. Отпишусь, когда сделаю.

      Про клик в бабл — подумаю. Но будет ли удобно, если в момент нажатия файл в бабл вдруг подменится другим бабл и вы откроете не то, что хотите?


      1. ljovcheg
        01.06.2016 12:22

        А что, если не обновлять бабл в тот момент, когда курсор находится на нём?


        1. AlexZaharow
          01.06.2016 12:44

          1. Поправил быстродействие. Теперь иконки файлов беруться из кеша, а не читаются для каждого файла.
          2. Добавил клик по баблу — действительно прикольная штука получилась!!!

          image

          Прошу скачать обновление.


          1. Shoorup
            01.06.2016 15:47

            Круто! Программа растет прямо как на дрожжах! Мне всё больше и больше нравится! Ушёл в тестирование временем…


        1. AlexZaharow
          01.06.2016 12:54

          Но как тогда дать понять пользователю, что произошло изменение списка файлов?


  1. AlexZaharow
    03.06.2016 02:08

    Внёс существенное исправление в программу: теперь .ini-файл записывается в UTF-8, поэтому всякие разные шрифты (в том числе кириллические) будут сохраняться и читаться хорошо. Очень благодарен за ценный совет Rustamer: http://forum.ru-board.com/profile.cgi?action=show&member=Rustamer

    Предлагаю скачать новую версию https://sourceforge.net/projects/filechangeswatcher/


  1. Shoorup
    06.06.2016 10:00

    Еще одно пожелание: история. Можно сделать чтобы период истории регулировался. Мне например было бы удобно в понедельник найти файлы с которыми я работал в пятницу.


  1. Vladimir_Izotov
    08.06.2016 10:57

    Спасибо за прогу!
    А можете сделать так, чтобы файл сразу открывался по клику, а не показывался в проводнике?
    Хотя бы по настройке.