Как стать автором
Обновить

Комментарии 49

С FileSystemWatcher стоит быть осторожным, у него были баги с утечкой памяти. По ссылке можно уйти на обсуждение. Возможно уже пофиксили, но в свое время потратил кучу времени пока понял почему мой сервис (24x7) за две недели начинал по 2 гига оперативы выжирать. Помог только анализ профайлером, потому что на библиотеки из .NET думал в последнюю очередь.
Спасибо за предупреждение. Хоть по вашей ссылке об этом и написано в 2011 году, но microsoft не всегда спешит исправлять тонкие места годами. Надо будет понаблюдать.
Хотелось бы на исходники взглянуть.
На https://sourceforge.net/projects/filechangeswatcher/ к сожалению доступен только архивированный *.exe.
Было бы прекрасно, если бы Вы выложили исходники на github.
Очень нужная утилита, спасибо автору! Внесу пару пожеланий. Ну во-первых уведомления желательно сделать отключаемыми. Второе: надо исключить системные директории из слежения, плюс возможность добавить стандартные папки типа рабочего стола, загрузок, изображений и прочего пользовательского окружения.
Благодарю. :)

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

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

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

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

Очень просто — не используйте ini, тем более в виде кривых сторонних индусских библиотек. Что за мракобесие в самом деле, чем стандартный app.config не угодил?
Не хотелось писать диалог для настроек. Мне ini как-то тоже не очень, но он как-то менее подвержен внесению ошибок руками, чем редактирование xml напрямую.
Например, сделать копипасту имени каталога в ini-файл проще, чем выбирать какой-либо каталог стандартными средствами windows в диалоговых окнах или писать руками теги xml.
Тут уж если и не ini, то json подошёл бы, но он не сишарпабельный :)
Json вполне сишарпабельный, пишем класс настроек и сериализуем/десериализуем его в файл через стандартный DataContractJsonSerializer или проверенной временем сборкой Newtonsoft.Json
Newton как-то не попадался раньше. Гляну.
Интерфейс для отключаемый уведомлений очень простой — галочка в контекстном меню в настройках. Дефолтные папки имхо лучше сделать все за исключением системных типа Windows, AppData и прочих из дефолтных путей, но добавить именно папки пользователя, чтобы установил программу и она сразу работала как надо, ну при желании указал еще другие диски. Тоесть по дефолту следить за всем диском C: кроме системных папок.
Коллеги, я тут нечаянно отменил комментарий «xsikor». Прошу прощения. Вот комментарий:

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

Мой ответ:

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

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

«Вот сделать бы лог появления, копий этих файлов и историю изменения/удаления.» — за одним каталогом можно следить. Уследить за процессом я цели не ставил. Ваша задача из разряда администрирования. У них точно такие утилиты есть. Правда не все бесплатные. В принципе можно сделать ещё одну секцию, чтобы мониторить всё, что происходит в каталоге без исключения, но можно подумать и сделать по секции с настройками на каталог, но это на будущее.
>Мне хотелось бы еще некий монитор/лог файлов которые делает например инсталлер
Для windows есть бесплатная утилита FileMon, доступна на technet.
Позволяет проследить за процессом, что и куда он пишет\читает
technet.microsoft.com/ru-ru/sysinternals/filemon.aspx
Uninstall Tool имеет функцию отслеживания вносимых изменений в ФС и в реестр при установке, правда там цель — чтоб при удалении все хвосты подчистить
Большое спасибо за программу. Включил слежение на всех дисках, но использовать буду не для того, для чего использует автор. Мне нравится видеть, как система «живёт») Что где программы сохраняют на диске. Забавно, например, что фаерфокс часто перезаписывает файл SiteSecurityServiceState.txt в профиле пользователя. Почему не хранить это в базе настроек?

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

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

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

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

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

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

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

image
сегодня точно попробую, надо настройку еще сделать: копировать файл в папку при изменении.
как еще одно применение, мониторим список, если хоть один из файлов из списка изменился блокировать рабочую станцию (лучше завершение сеанса) — актуально критичных компьютеров за которыми операторы работают, в банках это АРМ КБР, ПТК ПСД
сегодня точно попробую, надо настройку еще сделать: копировать файл в папку при изменении.
как еще одно применение, мониторим список, если хоть один из файлов из списка изменился блокировать рабочую станцию (лучше завершение сеанса) — актуально критичных компьютеров за которыми операторы работают, в банках это АРМ КБР, ПТК ПСД
Отличная программулинка получилась. Вроде мелочь, а оказывается, что не хватало.
Из пожеланий: при клике на бабл — открытие папки с файлом, что бы не идти в контектное меню ради только что изменённого файла
Спасибо.
Я подумаю на открыванием по нажатию, потому что обычно нажимают на надоедливые баллоны, чтобы они закрылись. Я не нашёл как сделать на баллон кнопку «закрыть» (везде пишут «как», но вот у меня нет такой настройки, поэтому, как только выясню — поэкспериментирую с этим). Пока — скачайте 1.0.7 — обновил до наблюдения за сетевыми путями.
Не знаю как у других, а у меня заметно подтормаживает приложение при клике в трее. Возможно такого рода программу надо было писать не на .NET… (ИМХО).
Еще из пожеланий: открытие настройки программы при двойном клике (ЛКМ) на иконке в трее. Настройки кстати хорошо бы не в ini файле сделать, а по нормальному settings в диалоговом окне.
А почему в автозагрузке программа называется stroiproject?
Насчет кликания на бабл поддерживаю. Тоже кликаю и жду открытия папки с целевым файлом.
stroiproject — это я начинал эту программу из одного старого проекта, вот его namespace и остался. Сейчас уже убрал.

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

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

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

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

image

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

Предлагаю скачать новую версию https://sourceforge.net/projects/filechangeswatcher/
Еще одно пожелание: история. Можно сделать чтобы период истории регулировался. Мне например было бы удобно в понедельник найти файлы с которыми я работал в пятницу.
Постараюсь добавить.
Спасибо за прогу!
А можете сделать так, чтобы файл сразу открывался по клику, а не показывался в проводнике?
Хотя бы по настройке.
Здравствуйте.
Я сейчас продолжаю модифицировать программу. Расширяю функционал (хочу добавить логирование стираемых файлов, но тут хардкор с журналом безопасности и настройками windows). Постараюсь учесть ваше пожелание, т.к. вполне удобно для некоторых типов файлов так делать.
Однозначно по настройке, потому как мне например удобно просто увидеть в папке этот файл, но не открывать его. Может я его перенести хочу куда или открыть определенной программой а не по умолчанию… да мало что еще.
Нашёл как в WPF расположить два MenuItem горизонтально:

image

Запускающая команда будет располагаться справа от имени файла. А слева — как обычно, открытие каталога.
Так удобно будет? (иконки, конечно, поменяю)
Ну в целом хорошо, но лично я открываю тыкая на балон. Поэтому это всеравно в настройки мне кажется надо. По балону это один тык, а через контекстное меню это 2 тыка.
Можно попробовать обрабатывать на балоне событие левого тыка (открытие папки и подсветка файла), а правым тыком открытие файла.
Лучше правой и левой кнопками по баллону.
Но в любом случае спасибо.
В итоге я решил отказаться от баллона. В C# на него почти ничего не повесить. Поэтому перешёл на WPF-popup и вот пример:

image

Единственно, чего нет — хвостика, указывающего на иконку. А так теперь можно что угодно добавить. Хоть превьюшку, если файл является картинкой. (По таймеру, чтобы не подвешивать систему на каждом файле).

Хотел бы узнать ваше мнение.
Для определения имени пользователя, удалившего файл, требуется регистрация события безопасности в журнале windows security, поэтому требуется дополнительная настройка windows (в групповой политике включить ведение журнала). Так оказывается консоли групповой политики нет в Windows Home, хотя сама политика есть. В принципе можно написать функцию, которая выставит эту политику. Но не будет ли такая функция «пугать» пользователей (естественно она будет спрашивать разрешения)?

P.S.
Если бы можно было узнать координаты иконки, то и хвостик можно было бы нарисовать. XAML творит чудеса.
Обычно возле настроек с такими сообщениями ставят иконку со щитом — подразумевается, что сейчас выскочит сообщение Windows о безопасности. Но это когда будет отдельное окно с настройками. Меня точно не напугает:)
Насчет хвостика, его можно потом дорисовывать когда пользователь тыкнет правой кнопкой или левой по иконке, тем самым выдав координаты иконки:) Но мне кажется должны как-то штатно получаться координаты…
А вот мне, собственно, баллон и не нужен.
Настройка винды «Не показывать уведомления» не работает, поскольку это, собственно, не уведомление.
Хотелось бы иметь возможность в настройках отключить уведомление.

PS наверное использовать Хабр как issue tracker не очень хорошо. Не дадите ссылочку, где можно писать хотелки? Можно и в заглавное сообщение.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории