2016-05-26 5 views
1

В настоящее время я работаю над приложением фидера, которое ищет новые файлы и печатает мне его имя. Но когда я создаю новый файл, имя файла печатается сразу же на консоли. Он не ждет, пока я переименую вновь созданный файл. Как я могу это сделать?FileSystemWatcher - создание и переименование C#

Ниже приведены мои настройки. Я не использовал watcher.Renamed+=OnRenamed, потому что, когда я переименовываю любой другой файл, который находится в папке, он печатает на консоли. Но мое требование показывает только список вновь созданных файлов.

watcher = new FileSystemWatcher(folderPath); 
watcher.IncludeSubdirectories = true; 
watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName; 
watcher.Filter = "*.*"; 
watcher.Created += OnCreated; 

ТИА

ответ

1

Проблема заключается в (вероятно), что вы собираетесь в проводнике Windows правой кнопкой мыши и выбрав новый -> тип файла. Когда вы это сделаете, окна сразу создают файл с именем по умолчанию, например New Text Document.txt, и дают вам возможность переименовать его. Это переименование, которое следует за неотличимым от любого другого переименования, так что у вас есть 2 варианта.

  1. Прекратите создание таких файлов, скорее создайте файлы, открыв текстовый редактор (или любое другое приложение, использующее слово, excel и т. Д.), Создайте новый файл в приложении и сохраните его с правильным именем. Это создаст файл с именем, которое вы ожидаете.
  2. Измените свой код, чтобы обслуживать переименование файлов.
+0

Спасибо CamW :) Я думал, что файловый менеджер справится с этой ситуацией. Так пытался с созданием файлов в самой папке. – ASN

+0

Да, прискорбно, что MS решила создать Windows Explorer таким образом, а не ждать, пока пользователь не переименует файл, прежде чем создавать его на диске. – CamW

+0

Привет Cam. У меня есть еще одно сомнение. Я сталкиваюсь с проблемой при перемещении набора документов в папку. например: Когда я вставляю/перемещаю около 30 документов в папку, в которой работает файловый менеджер, она не отображает все имена файлов при печати. Но когда я держу точку разрыва, то ее работа. Есть ли проблемы с этим? – ASN

0

Необходимо переименовать из-за того, как файловый обозреватель в Windows обрабатывает создание новых файлов (например, с помощью New-> Text Document ярлыка).

Вы можете отслеживать полный путь добавленных файлов через HashSet<string> объект и изменить логику мониторинга следующим образом:

Когда файл создан, проверьте его размер. Вы можете использовать FileInfo.Length для этого. Если это нулевые байты, проигнорируйте событие. В противном случае добавьте его в HashSet (дубликаты будут проигнорированы автоматически).

Когда файл переименован в, проверьте старый полный путь и имя и удалите его из HashSet, если он есть; добавьте новый полный путь и имя к HashSet независимо от размера.

Это должно поймать все новые файлы и игнорировать объекты стиля «Новый текстовый документ».

 Смежные вопросы

  • Нет связанных вопросов^_^