本文介绍了FileSystemWatcher的不监控用户的本地文件夹或Internet临时文件夹在Vista中(64位)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写了一个测试程序,以监控其指向C我的图片文件夹:\users [用户名] \Pictures和Internet临时文件夹为同一用户。这是,如果我将文件夹更改到其他位置,如D程序工作完全正常:\persona_pics。
的任何想法,为什么事件没有被当我设置提到的文件夹来监视长大的吗?



这里是代码。

 类节目
{
静态无效的主要(字串[] args)
{
// FileSystemWatcher的myJpegFileWatcher =新FileSystemWatcher的(@C:\Users\ [用户名] \AppData\Local\Microsoft\Windows\Temporary互联网Files\low\content.ie5\);
FileSystemWatcher的myJpegFileWatcher =新FileSystemWatcher的(@C:\Users\ [用户名] \Pictures\);

myJpegFileWatcher.Filter =* .JPG;
myJpegFileWatcher.Created + =新FileSystemEventHandler(myJpegFileWatcher_Created);
myJpegFileWatcher.Changed + =新FileSystemEventHandler(myJpegFileWatcher_Changed);
myJpegFileWatcher.IncludeSubdirectories = TRUE;
myJpegFileWatcher.NotifyFilter = NotifyFilters.CreationTime;

myJpegFileWatcher.EnableRaisingEvents = TRUE;

Console.Read();

}

静态无效myJpegFileWatcher_Changed(对象发件人,FileSystemEventArgs E)
{
FileInfo的duplicateFile =新的FileInfo(@ e.FullPath);
布尔标志= TRUE;

,而(标志)
{

{
如果(duplicateFile.Length> 20000)
{
duplicateFile .CopyTo(@D:\pics\spy\+ e.Name);
标志= FALSE;
的StreamWriter FS =新的StreamWriter(@D:\pics\log.txt,真正的);
fs.WriteLine(文件正被复制:{0},大小= {1},e.FullPath,duplicateFile.Length);
fs.Close();
}
,否则
{
的StreamWriter FS =新的StreamWriter(@D:\pics\log.txt,真正的);
fs.WriteLine(文件不被复制:{0},大小= {1},e.FullPath,duplicateFile.Length);
fs.Close();
}
}
赶上(异常前)
{
//
}
}

$} b
$ b上配置静态无效myJpegFileWatcher_Created(对象发件人,FileSystemEventArgs E)
{
FileInfo的duplicateFile =新的FileInfo(@ e.FullPath);
布尔标志= TRUE;

,而(标志)
{

{
如果(duplicateFile.Length> 20000)
{
duplicateFile .CopyTo(@D:\pics\spy\+ e.Name);
标志= FALSE;
的StreamWriter FS =新的StreamWriter(@D:\pics\log.txt,真正的);
fs.WriteLine(文件正被复制:{0},大小= {1},e.FullPath,duplicateFile.Length);
fs.Close();
}
}
赶上(异常前)
{
//
}
}



}
}

工作代码..



类节目
{
静态无效的主要(字串[] args)
{

  FileSystemWatcher的myJpegFileWatcher =新FileSystemWatcher的(@C:\Users\ [用户] \Pictures\); 

myJpegFileWatcher.Filter =* .JPG;

myJpegFileWatcher.Changed + =新FileSystemEventHandler(myJpegFileWatcher_Changed);

myJpegFileWatcher.IncludeSubdirectories = TRUE;

myJpegFileWatcher.EnableRaisingEvents = TRUE;

Console.Read();

}

静态无效myJpegFileWatcher_Changed(对象发件人,FileSystemEventArgs E)
{
FileInfo的duplicateFile =新的FileInfo(@ e.FullPath);
布尔标志= TRUE;

,而(标志)
{

{
如果(duplicateFile.Exists)
{

如果(duplicateFile.Length> 20000)
{

{
duplicateFile.CopyTo(@D:\pics\spy\+ e.Name,真正);
}
赶上(异常前)
{
的StreamWriter FS =新的StreamWriter(@D:\pics\log.txt,真正的);
fs.WriteLine(错误内复制:{0},ex.Message);
fs.Close();
}
终于
{
标志= FALSE;
的StreamWriter FS =新的StreamWriter(@D:\pics\log.txt,真正的);
fs.WriteLine(文件正被复制:{0},大小= {1},e.FullPath,duplicateFile.Length);
fs.Close();
}
}
,否则
{
的StreamWriter FS =新的StreamWriter(@D:\pics\log.txt,真正的);
fs.WriteLine(文件不被复制:{0},大小= {1},e.FullPath,duplicateFile.Length);
fs.Close();
}
}
}
赶上(异常前)
{
的StreamWriter FS =新的StreamWriter(@D:\pics\log。 TXT,真正的);
fs.WriteLine(错误:{0},ex.Message);
fs.Close();
}
}

}


}


解决方案

尝试运行的FileMon(Sysinternals的可通过MSDN工具)。它会告诉你什么是你的代码实际执行文件系统上。然后,你也许能找出原因,或当您将代码为我的图片等。


究竟表现不同

I wrote a test program to monitor my Picture folder which points to c:\users[username]\Pictures and temporary internet files folder for the same user. This is program works perfectly fine if I change the folder to other location like d:\persona_pics.Any idea why events are not being raised when I set the mentioned folder to monitor?

here is the code.

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)
                {
                    //   
                }
            }



        }
    }

Working code..

class Program { static void Main(string[] 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(); 
            }
        }

    }


}
解决方案

Try to run FileMon (SysInternals tool available through MSDN). It will show you what your code actually does on the file system. Then you might be able to find out why or what exactly behaves differently when you point your code to "My Pictures" etc.

这篇关于FileSystemWatcher的不监控用户的本地文件夹或Internet临时文件夹在Vista中(64位)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-24 09:56