2009-08-29 13 views
3

同じユーザーのc:\ users [ユーザー名] \ Picturesと一時インターネットファイルフォルダを指すMy Pictureフォルダを監視するテストプログラムを作成しました。これは、d:\ persona_picsのような別の場所にフォルダを変更すると、プログラムは完璧に動作します。 上記のフォルダを監視するように設定してもイベントが発生しない理由は何ですか?FileSystemWatcherはVista(64ビット)のローカルユーザーフォルダまたは一時インターネットファイルフォルダを監視しません

ここにコードがあります。

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



     } 
    } 

の作業コードに...

クラスプログラム { 静的な無効メイン(文字列[] 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(); 
      } 
     } 

    } 


} 
+0

フォルダーのアクセス許可を確認しましたか? – skalb

+0

Vista/Win7で仮想化されている可能性はありますか?プログラムを起動するとどうなりますか? –

+0

フォルダのアクセス許可は、削除したc:\ usersでのみ読み込まれていました。 仮想PCを実行したくありません。私は、このプログラムは他のフォルダで完璧に動作するので、他のフォルダのようにすべてのシステムフォルダにアクセスするには何らかの方法があるべきだと思います。私は管理者と32ビットアプリケーションとしてランニングしようとしました。 –

答えて

2

MSDNを通じて利用可能(SysInternalsのツールFileMonのを実行してみます)。あなたのコードがファイルシステム上で実際に何をするかを示します。次に、コードを「マイピクチャ」などに向けたときに、どうやって違う動作をするのかを知ることができます。

関連する問題