2011-06-21 9 views
6

C#でフォルダをスキャンし、プログラムのボタンが押されてから5.30pm後に作成されたファイルを開きます。これはまた、サブフォルダ内で検索する必要があります。C#フォルダをスキャンして一定時間後に作成されたファイルを開く

私はこれをどうやってやるのかよくわからないので、私は正しい方向で私を指し示すためにいくつかの解決策が必要です。

これはフォルダウォッチャープログラムの一部です。問題は、ユーザーが家に帰ってPCの電源が切られ、17.30以降にディレクトリにファイルが作成されていることです。だから私は、プログラムが午前中に再起動されたときに、17.30以降に作成されたものを検出して開く方法が必要です。

private void button1_Click(object sender, EventArgs e) 
    { 
     folderBrowser.ShowDialog(); 

     textBox1.Text = folderBrowser.SelectedPath; 
     filewatcher.Path = textBox1.Text; 
     Registry.SetValue("HKEY_CURRENT_USER\\SOFTWARE\\COMPANY\\FOLDERWATCHER", "FOLDERPATH", textBox1.Text); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     String WatchFolder = Registry.GetValue("HKEY_CURRENT_USER\\SOFTWARE\\COMPANY\\FOLDERWATCHER", "FOLDERPATH", "").ToString(); 

     textBox1.Text = WatchFolder; 
     filewatcher.Path = WatchFolder; 
    } 

    private void Form1_Resize(object sender, EventArgs e) 
    { 
     if (WindowState == FormWindowState.Minimized) 
     { 
      ShowInTaskbar = true; 
      Hide(); 
     } 
    } 

    private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e) 
    { 
     if(!e.FullPath.EndsWith("temp.temp")) 
     { 
      MessageBox.Show("You have a Collection Form: " + e.Name); 
      Process.Start("explorer.exe", e.FullPath); 
     } 
    } 

    private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) 
    { 
     Show(); 
    } 
} 

これは上の完全コードです。 17.30以降に作成されたファイルを開くためにボタンを使用したいと思います。

答えて

19

System.IO名前空間を見ると、必要なものがすべてあります。

ディレクトリ情報およびファイルクラスは、あなたが望むことを行います。

+1

FileInfo/Directory.CreationTimeはより正確です。http://msdn.microsoft.com/en-us/library/system.io.filesysteminfo.creationtime.aspxおよびhttp://msdn.microsoft.com/en-us/ /library/system.io.filesysteminfo.creationtime.aspx – RvdK

+2

@PoweRoy:よく私は彼のために簡単にしたくありませんでした;) –

+3

だから、あなたの宿題はあなたのために済んでいます。少なくとも、私はこれらの質問(一桁の担当者がいる人)のいくつかを見ると、その気持ちを感じています。 – dpurrington

3

FileSystemWatcherMSDN documentation)を使用すると、ボタンを押した後に(アプリケーションの実行中に)作成されたファイルを検出できます。

FileSystemWatcher watcher = new FileSystemWatcher(); 
watcher.Path = "C:\\YourDirectory"; 
watcher.Created += (sender, args) => { 
    // File was created 
} 
watcher.EnableRaisingEvents = true; 

これにより、ファイルの作成時(アプリケーションの実行中)にファイルを追跡できます。

指定された時間範囲内(アプリケーション起動前)に作成されたすべてのディレクトリの一覧を取得する場合は、Directory.GetDirectoriesDirectory.GetFilesを使用してディレクトリツリーを検索できます。

+3

これはリアルタイムの変更を取得する正しい方法ですが、彼はこれを歴史的にリアルタイムで行う必要があるように聞こえます。 – Nix

+0

こんにちはThe Directory.GetdirectoriesとDirectory.GetFilesは私が探しているようです。 – Matt

1

datetimeの代わりに、日付と時刻の値を入力します。私が助けた

public static List<string> GetFilesCreatedAfter(string directoryName, DateTime dt) 
{ 
    var directory = new DirectoryInfo(directoryName); 
    if (!directory.Exists) 
     throw new InvalidOperationException("Directory does not exist : " + directoryName); 
    var files = new List<string>(); 
    files.AddRange(directory.GetFiles().Where(n => n.CreationTime > dt).Select(n=>n.FullName)); 
    foreach (var subDirectory in Directory.GetDirectories(directoryName)) 
    { 
     files.AddRange(GetFilesCreatedAfter(subDirectory,dt)); 
    } 
    return files; 
} 

希望:

void DirSearch(string dir) 
{ 
    try 
    { 
     foreach (string d in Directory.GetDirectories(dir)) 
     { 
      foreach (string f in Directory.GetFiles(d, "*.*")) 
      { 
       if(DateTime.Compare(f.GetCreationTime, datetime)) 
       { 
        //files found    
       } 
      } 
      DirSearch(d); 
     } 
    } 
    catch (System.Exception excpt) 
    { 
     Console.WriteLine(excpt.Message); 
    } 
} 
5

はここで、あなたが探している再帰的な方法です。

+0

情報をありがとう、どうすればこのボタンを使って書くことができますか? – Matt

+0

ボタンのClickイベントのイベントハンドラで、このメソッドを希望のdirectoryPathとDateTimeで呼び出します。つまり、 'var files = GetFilesCreatedAfter(folderBrowser。SelectedPath、新しいDateTime(2011,06,24,17,30,0)); ' –

関連する問題