Я столкнулся с несколькими "решениями" здесь и через сеть, но ни один, кажется, не отвечает всем требованиям.
То, что я надеюсь делать, имеют приложение, контролируют папку для новых файлов (или созданием, перемещением или копией) и выполняют действия с теми объектами. Так как тот был сценарий, я обратился к классу FileSystemWatcher для выполнения этого действия.
Проблема состоит в том что файл FileSystemWatcher. Созданное событие запущено, прежде чем весь файл создается (наиболее заметно замеченный через копию большого файла).
Там какой-либо путь состоит в том, чтобы иметь этот огонь события в конце создания файла в противоположность началу? Я попробовал различную комбинацию FileSystemWatcher. Свойство NofityFilter без успеха.
Заранее спасибо! :)
Я использовал пару решений для этой ситуации.
Если вы можете работать с создателем файла и использовать схему переименования файла. EG. Создайте файл как __Name_ во время создания, а в конце процесса переименуйте его в Name и событие сработает, и у вас будет полный файл.
Когда сработает ваш триггер, проверьте, можете ли вы получить эксклюзивную блокировку только для чтения на файл. Если вы можете, значит, операция записи в файл завершена. (Я писал кое-что об этом в другом вопросе Keep settings in sync between forms application and windows service (or any n-tier, really))
Вы могли бы интегрировать что-то вроде #2 в ваше Changed Event и тогда вы получите результат.
Хм интересная проблема. Я никогда не использовал объект при наблюдении за большими файлами. Немного поискал и, похоже, одно из решений - отслеживать также событие Changed. Потому что после завершения копирования файла (после того, как созданный файл был создан) также будет брошено событие Changed (потому что файл увеличился в размере)
Более подробная информация из того, что я прочитал здесь: http://social.msdn.microsoft.com/forums/en-US/vblanguage/thread/f84bb7c8-b7d5-44da-b0f3-6d1a70415d11/
Вам нужно будет отслеживать закрытие файла после его создания, и я сомневаюсь, что это возможно с FileSystemWatcher. Если вы не найдете решения с помощью FileSystemWatcher, посмотрите на наш продукт CallbackFilter, который позволяет отслеживать все операции в реальном времени.
Я знаю, что то, что я вам скажу, не выглядит элегантным. Мне также приходилось отслеживать файлы, которые приходили из разных мест, некоторые из них были большими, а некоторые - маленькими. Мы выяснили, что FileSystemWatcher не подходит для этой цели. Если вы хотите быть уверены на 100%, вы можете время от времени проверять, используя класс Timer и его событие Elapsed.