FileSystemWatcher не отслеживает локальную папку пользователя или папку временных интернет-файлов в Vista (64-битная версия) - PullRequest
3 голосов
/ 29 августа 2009

Я написал тестовую программу для наблюдения за моей папкой Picture, которая указывает на папку c: \ users [username] \ Pictures и временные файлы Интернета для того же пользователя. Эта программа прекрасно работает, если я перехожу в другую папку, например d: \ persona_pics. Любая идея, почему события не возникают, когда я устанавливаю упомянутую папку для мониторинга?

вот код.

class Program
    {
        static void Main(string[] args)
        {
            //FileSystemWatcher myJpegFileWatcher = new FileSystemWatcher(@"C:\Users\[username]\AppData\Local\Microsoft\Windows\Temporary Internet Files\low\content.ie5\"); 
            FileSystemWatcher myJpegFileWatcher = new FileSystemWatcher(@"C:\Users\[username]\Pictures\ "); 

            myJpegFileWatcher.Filter = "*.jpg";
            myJpegFileWatcher.Created += new FileSystemEventHandler(myJpegFileWatcher_Created);
            myJpegFileWatcher.Changed += new FileSystemEventHandler(myJpegFileWatcher_Changed);
            myJpegFileWatcher.IncludeSubdirectories = true;
            myJpegFileWatcher.NotifyFilter = NotifyFilters.CreationTime;

            myJpegFileWatcher.EnableRaisingEvents = true;

            Console.Read();

        }

        static void myJpegFileWatcher_Changed(object sender, FileSystemEventArgs e)
        {
            FileInfo duplicateFile = new FileInfo(@e.FullPath);
            bool flag = true;

            while (flag)
            {
                try
                {
                    if (duplicateFile.Length > 20000)
                    {
                        duplicateFile.CopyTo(@"d:\pics\spy\ " + e.Name);
                        flag = false;
                        StreamWriter fs = new StreamWriter(@"d:\pics\log.txt", true);
                        fs.WriteLine("file is being copied:{0}, Size={1}", e.FullPath, duplicateFile.Length);
                        fs.Close();
                    }
                    else
                    {
                        StreamWriter fs = new StreamWriter(@"d:\pics\log.txt", true);
                        fs.WriteLine("file is not being copied:{0}, Size={1}", e.FullPath, duplicateFile.Length);
                        fs.Close();
                    }
                }
                catch (Exception ex)
                {
                    //   
                }
            }

        }

        static void myJpegFileWatcher_Created(object sender, FileSystemEventArgs e)
        {
            FileInfo duplicateFile = new FileInfo(@e.FullPath);
            bool flag = true;

            while (flag)
            {
                try
                {
                    if (duplicateFile.Length > 20000)
                    {
                        duplicateFile.CopyTo(@"d:\pics\spy\ " + e.Name);
                        flag = false;
                        StreamWriter fs = new StreamWriter(@"d:\pics\log.txt", true);
                        fs.WriteLine("file is being copied:{0}, Size={1}", e.FullPath, duplicateFile.Length);
                        fs.Close();
                    }
                }
                catch (Exception ex)
                {
                    //   
                }
            }



        }
    }

Рабочий код ..

Программа класса { static void Main (строка [] args) {

        FileSystemWatcher myJpegFileWatcher = new FileSystemWatcher(@"C:\Users\[user]\Pictures\"); 

        myJpegFileWatcher.Filter = "*.jpg";

        myJpegFileWatcher.Changed += new FileSystemEventHandler(myJpegFileWatcher_Changed);

        myJpegFileWatcher.IncludeSubdirectories = true;

        myJpegFileWatcher.EnableRaisingEvents = true;

        Console.Read();

    }

    static void myJpegFileWatcher_Changed(object sender, FileSystemEventArgs e)
    {
        FileInfo duplicateFile = new FileInfo(@e.FullPath);
        bool flag = true;

        while (flag)
        {
            try
            {
                if (duplicateFile.Exists)
                {

                    if (duplicateFile.Length > 20000)
                    {
                        try
                        {
                            duplicateFile.CopyTo(@"d:\pics\spy\" + e.Name,true);
                        }
                        catch (Exception ex)
                        {
                            StreamWriter fs = new StreamWriter(@"d:\pics\log.txt", true);
                            fs.WriteLine("Error Inside copying:{0}", ex.Message);
                            fs.Close(); 
                        }
                        finally
                        {
                            flag = false;
                            StreamWriter fs = new StreamWriter(@"d:\pics\log.txt", true);
                            fs.WriteLine("file is being copied:{0}, Size={1}", e.FullPath, duplicateFile.Length);
                            fs.Close();
                        }
                    }
                    else
                    {
                        StreamWriter fs = new StreamWriter(@"d:\pics\log.txt", true);
                        fs.WriteLine("file is not being copied:{0}, Size={1}", e.FullPath, duplicateFile.Length);
                        fs.Close();
                    }
                }
            }
            catch (Exception ex)
            {
                StreamWriter fs = new StreamWriter(@"d:\pics\log.txt", true);
                fs.WriteLine("Error:{0}", ex.Message);
                fs.Close(); 
            }
        }

    }


}

1 Ответ

2 голосов
/ 30 августа 2009

Попробуйте запустить FileMon (инструмент SysInternals доступен через MSDN). Он покажет вам, что на самом деле делает ваш код в файловой системе. Тогда вы сможете выяснить, почему или что ведет себя по-разному, если указать свой код на «Мои рисунки» и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...