2014-10-13 2 views
1

Я хочу отслеживать файлы, открытые пользователем, и выбирать их по одному конкретному расширению. Если в открывшемся файле есть это расширение, я хочу назначить его путь к переменной для дальнейшей обработки. Примеры приложений очень требовательны к процессору. Есть ли простой и эффективный способ сделать это?Отслеживание файлов определенного расширения

+0

http://stackoverflow.com/questions/14779616/filesystemwatcher-used-to-watch-for-folder-file-open/14779729#14779729 прочитайте это –

+0

Я видел это. Он ищет определенную папку, но я хочу посмотреть всю систему, особенно флеш-накопители. А также последний ответ предлагает C++. Я хочу использовать C#. – m1clee

+0

Возможно, вместо того, чтобы контролировать всю систему, вы можете связать файлы .ppt/.pptx с вашим приложением. Это звучит намного проще. –

ответ

2

Системный мониторинг файлов -> открытые события (включая сетевые диски, флэш-накопители и т. Д.) Потребует от вас записи драйвера фильтра FS.

Поскольку у вас есть доступ к машине, и вам определенно нужен доступ к системе, вы можете просто написать простое приложение, которое будет связано с расширениями Powerpoint, выполнить копию, а затем открыть Powerpoint, используя путь к файлу в качестве командной строки аргумент. Он будет выглядеть примерно так:

using System; 
using System.Windows; 
using System.Diagnostics; 
using System.IO; 

namespace WpfApplication1 
{ 
    internal class MainWindow : Window 
    { 
     public MainWindow() 
     { } 

     [STAThread()] 
     static void Main(string[] args) 
     { 
      if (args.Length == 0) 
      { 
       // [ show error or print usage ] 
       return; 
      } 

      if (!File.Exists(args[0])) 
      { 
       // [ show error or print usage ] 
       return; 
      } 

      // Perform the copy 
      FileInfo target = new FileInfo(args[0]); 
      string destinationFilename = string.Format("X:\\ExistingFolder\\{0}", target.Name); 
      File.Copy(target.FullName, destinationFilename); 

      // You may need to place the filename in quotes if it contains spaces 
      string targetPath = string.Format("\"{0}\"", target.FullName); 
      string powerpointPath = "[FullPathToPowerpointExecutable]"; 
      Process powerpointInstance = Process.Start(powerpointPath, targetPath); 

      // This solution is using a wpf windows app to avoid 
      // the flash of the console window. However if you did 
      // wish to display an accumulated list then you may choose 
      // to uncomment the following block to display your UI. 

      /* 
      Application app = new Application(); 
      app.MainWindow = new MainWindow(); 
      app.MainWindow.ShowDialog(); 
      app.Shutdown(0); 
      */ 

      Environment.Exit(0); 
     } 
    } 
} 

Надеюсь, что это поможет.

+0

, если я изменил функцию WPF по умолчанию, имя которой является «общедоступным MainWindow()», в «static void Main (строки [] args)», то это дает ошибку. Если я изменил его на что-то еще, функция не запустится. – m1clee

+0

Создайте новое приложение WPF и удалите сгенерированные файлы (App.config, App.xaml, App.xaml.cs, MainWindow.xaml и MainWindow.xaml.cs). Затем добавьте новый класс под названием «MainWindow» и очистите все сгенерированный код. Вставьте код выше и он скомпилируется. Измените пути и начните тестирование. (Я тестировал его до создания сообщения) – Jeff

+0

@ m1clee - Я рад, что сработал для вас. Удачи. – Jeff

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