我想在windows服务中追踪我指定的数个文件,如果文件移动,把旧路径和新路径返回給我!求方法!这里有没有哪位大哥实现过!希望指点

解决方案 »

  1.   

    有一个FileSystemWatcher的类可以用来监视文件,文件夹也可以,怎么用,你可以用MSDN来查询一下很方便的
      

  2.   

    // monitor_fs.cpp
    // compile with: /clr
    #using <system.dll>using namespace System;
    using namespace System::IO;ref class FSEventHandler
    {
    public:
        void OnChanged (Object^ source, FileSystemEventArgs^ e)
        {
            Console::WriteLine("File: {0} {1}", 
                   e->FullPath, e->ChangeType);
        }
        void OnRenamed(Object^ source, RenamedEventArgs^ e)
        {
            Console::WriteLine("File: {0} renamed to {1}", 
                    e->OldFullPath, e->FullPath);
        }
    };int main()
    {
       array<String^>^ args = Environment::GetCommandLineArgs();   if(args->Length < 2)
       {
          Console::WriteLine("Usage: Watcher.exe <directory>");
          return -1;
       }   FileSystemWatcher^ fsWatcher = gcnew FileSystemWatcher( );
       fsWatcher->Path = args[1];
       fsWatcher->NotifyFilter = static_cast<NotifyFilters> 
                  (NotifyFilters::FileName | 
                   NotifyFilters::Attributes | 
                   NotifyFilters::LastAccess | 
                   NotifyFilters::LastWrite | 
                   NotifyFilters::Security | 
                   NotifyFilters::Size );    FSEventHandler^ handler = gcnew FSEventHandler(); 
        fsWatcher->Changed += gcnew FileSystemEventHandler( 
                handler, &FSEventHandler::OnChanged);
        fsWatcher->Created += gcnew FileSystemEventHandler( 
                handler, &FSEventHandler::OnChanged);
        fsWatcher->Deleted += gcnew FileSystemEventHandler( 
                handler, &FSEventHandler::OnChanged);
        fsWatcher->Renamed += gcnew RenamedEventHandler( 
                handler, &FSEventHandler::OnRenamed);    fsWatcher->EnableRaisingEvents = true;    Console::WriteLine("Press Enter to quit the sample.");
        Console::ReadLine( );
    }
      

  3.   

    C# 版有 
    public class Watcher
    {    public static void Main()
        {
    Run();    }    [PermissionSet(SecurityAction.Demand, Name="FullTrust")]
        public static void Run()
        {
            string[] args = System.Environment.GetCommandLineArgs();        // If a directory is not specified, exit program.
            if(args.Length != 2)
            {
                // Display the proper way to call the program.
                Console.WriteLine("Usage: Watcher.exe (directory)");
                return;
            }        // Create a new FileSystemWatcher and set its properties.
            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Path = args[1];
            /* Watch for changes in LastAccess and LastWrite times, and 
               the renaming of files or directories. */
            watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite 
               | NotifyFilters.FileName | NotifyFilters.DirectoryName;
            // Only watch text files.
            watcher.Filter = "*.txt";        // Add event handlers.
            watcher.Changed += new FileSystemEventHandler(OnChanged);
            watcher.Created += new FileSystemEventHandler(OnChanged);
            watcher.Deleted += new FileSystemEventHandler(OnChanged);
            watcher.Renamed += new RenamedEventHandler(OnRenamed);        // Begin watching.
            watcher.EnableRaisingEvents = true;        // Wait for the user to quit the program.
            Console.WriteLine("Press \'q\' to quit the sample.");
            while(Console.Read()!='q');
        }    // Define the event handlers.
        private static void OnChanged(object source, FileSystemEventArgs e)
        {
            // Specify what is done when a file is changed, created, or deleted.
           Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
        }    private static void OnRenamed(object source, RenamedEventArgs e)
        {
            // Specify what is done when a file is renamed.
            Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
        }
    }
      

  4.   

    写文件名也要先写 watcher.Path,watcher.path只能是目录