Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Событие копирования файла/директории, Лишние события от FileSystemWatcher 
:(
    Опции темы
Dogevec
Дата 15.12.2011, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 22.8.2008

Репутация: нет
Всего: нет



Отслеживаю изменения в контролируемой директории при помощи FileSystemWatcher. При создании, изменении, переимонвании и удалении файлов/поддиректорий в контролируемой директории, всё хорошо, приходит по одному сообщению. Но при копировании файла в контролируемую директорию приходит сообщении о создании файла/директории, а так же 1-2 сообщения о его изменении. Как избежать этого? Дело в FileSystemWatcher или это примудрости самой OS Windows ?


Код создания класса FileSystemWatcher :
Код

private int CreateWatcher(string path, FileSystemWatcher wc)
        {
            // Create a new FileSystemWatcher and set its properties.
            if (string.IsNullOrEmpty(path))
                return 0;

            wc = new FileSystemWatcher();
            wc.Path = path;

            // Watch both files and subdirectories.
            wc.IncludeSubdirectories = true;

            // Watch for all changes specified in the NotifyFilters enumeration.
            wc.NotifyFilter = NotifyFilters.Attributes |
                                    NotifyFilters.CreationTime |
                                    NotifyFilters.DirectoryName |
                                    NotifyFilters.FileName |
                                    NotifyFilters.LastAccess |
                                    NotifyFilters.LastWrite |
                                    NotifyFilters.Security |
                                    NotifyFilters.Size;

            // Watch all files.
            wc.Filter = "*.*";

            // Add event handlers.
            wc.Changed += new FileSystemEventHandler(OnChanged);
            wc.Created += new FileSystemEventHandler(OnCreated);
            wc.Deleted += new FileSystemEventHandler(OnDeleted);
            wc.Error += new ErrorEventHandler(OnError);
            wc.Renamed += new RenamedEventHandler(OnRenamed);

            //Start monitoring.
            wc.EnableRaisingEvents = true;

            return 1;
        }


Это сообщение отредактировал(а) Dogevec - 15.12.2011, 11:06
PM MAIL   Вверх
RastaDja
Дата 15.12.2011, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: нет
Всего: 5



скорее всего это Windows, так как для того чтоб скопировать файл, нужно сначала создать другой файл, в который записать содержимое исходного  файла. Тоже самое и с папкой. Кстати, если Вы копируете папку, например, с 2-мя, 3-мя, n, подпапками, у вас возникает 2, 3, и N событий создания папки?


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
Dogevec
Дата 15.12.2011, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 22.8.2008

Репутация: нет
Всего: нет



Только что проверил. Да, при копировании приходят сообщения о создании всех вложенных папках и файлах.

Добавлено через 1 минуту и 25 секунд
То есть, как я понимаю, в директории, куда копируется файл, создаётся темповкий файл и целевой файл. Затем данные заносяттся в темповский, а из него уже копируются в целевой?
PM MAIL   Вверх
RastaDja
Дата 15.12.2011, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: нет
Всего: 5



Цитата(Dogevec @  15.12.2011,  12:04 Найти цитируемый пост)
Как избежать этого?

Видимо никак, все работает правильно. 
А зачем вам этого избегать, для чего вам это надо? Все зависит от задачи...


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
Dogevec
Дата 15.12.2011, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 22.8.2008

Репутация: нет
Всего: нет



Необходимо мониторить изменения в расшаренной директории, и отправлять отчёт об этом на почту(список изменений за установленный интервал). И получается, что приходят два сообщения, о создании и изменении файла при копировании, что будет приводить просто к путанице в общем списке производимых операций...
PM MAIL   Вверх
RastaDja
Дата 15.12.2011, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: нет
Всего: 5



Относительно расшаренной директории, все происходит правильно, к томуже Вы не знаете, из какой папки производится копирование. Для отчета о копировани нужно знать папку источник и приемник (иначе как писать отчет? нужно что-то типа - скопировано от туда-то вот это, вот сюда. ). Приемник известен, а источник - видимо нет. Поэтому относительно расшареной папки (как и относительно любой) есть только операция создания и изменения.
  А если у вас есть возможность получить папку источник, тогда просто считаете число вложеных файлов, и при копировании оно должно быть равным числу происходящих событий. Когда все события произошли, пишите в отчет.

Это сообщение отредактировал(а) RastaDja - 15.12.2011, 14:39


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
RastaDja
Дата 15.12.2011, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: нет
Всего: 5



Цитата(Dogevec @  15.12.2011,  12:21 Найти цитируемый пост)
То есть, как я понимаю, в директории, куда копируется  файл, создаётся темповкий файл и целевой файл. Затем данные заносяттся в темповский, а из него уже копируются в целевой? 

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


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0926 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.