我想实现这样一个功能:
如果文件夹下有文件时,提示你有新的消息,要实时提示。
我想用timer控件,具体怎么用呢?
现在遇到问题:检测到有新文件时,跳出一个消息框后,但它会一直跳出。
怎么设置当跳出一个消息框后,就停止跳出,当有另一个新文件来的时候,又跳出一个。

解决方案 »

  1.   

    在.NET Framework中提供了一組API,用於監視本機或遠端電腦的檔案系統的異動,例如是否重新命名等,這組API定義在FileSystemWatcher類別,您可以在System.IO命名空間找到此類別。FileSystemWatcher物件提供了一組屬性可以用來設定監視的對象和行為,其中
    (1)Path屬性,用來設定監視的目錄。
    (2)Filter屬性,用來設定監視的檔案類型。若為空字串,表示監視所有的檔案類型。
    (3)IncludeSubdirectories屬性,用於設定是(true)否(false)需要監視子目錄。
    (4)NotifyFilter屬性,用於設定監視的項目,其型別為NotifyFilter列舉常數。
     
    例如,欲監視C目錄(包含子目錄)的txt檔案名稱或內容是否異動,則可以寫成:
    FileWatcher.Path="C:\";
    FileWatcher.Filter="*.txt"; 
    FileWatcher.IncludeSubdirectories=true;
    FileWatcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite 
     | NotifyFilters.FileName | NotifyFilters.DirectoryName;
     
    當目錄或檔案發生異動時,將觸發一組系統事件,您可以在程式中利用這些事件,進行相關的處理。FileSystemWatcher物件提供了Created、Deleted、Renamed及Changed等四個事件,說明如下:
    (1)當新增檔案時,將觸發Created事件。在Created事件程序中,使用FileSystemEventArgs型別參數的Name屬性,取出新增檔案的檔案名稱。
    (2)當刪除檔案時,將觸發Deleted事件。在Deleted事件程序中,使用FileSystemEventArgs型別參數的Name屬性,取出刪除檔案的檔案名稱。
    (3)當修改檔案名稱時,將觸發Renamed事件。在Renamed事件程序中,使用RenamedEventArgs型別參數的OldFullPath屬性,取出此檔案在修改前的完整名稱;FullPath屬性取出此檔案在修改後的完整名稱。
    (4)當監視的項目變更時,將觸發Changed事件。在Changed事件程序中,使用FileSystemEventArgs型別參數取得與此事件相關的資訊,例如使用ChangeType屬性,取出變更的類型等。當設定好要監視的對象和行為後,您可以對感興趣的事件撰寫處理程序。首先需要撰寫一個與FileSystemEventHandler委派具有相同簽章的事件處理程序,然後將此處理程序與特定的事件建立關聯即可。當事件發生時,便會執行對應的事件程序,進行相關的處理。例如欲監視檔案的新增、修改及刪除等操作,則可以寫成
    FileWatcher.Deleted += new FileSystemEventHandler(this.FileWatcher_Deleted);
    FileWatcher.Renamed += new RenamedEventHandler(this.FileWatcher_Renamed);
    FileWatcher.Created += new FileSystemEventHandler(this.FileWatcher_Created);
    private void FileWatcher_Created(object sender, System.IO.FileSystemEventArgs e) {
      MessageBox.Show(string.Format("新增一個{0}檔案",e.Name), this.Text);
    }
    private void FileWatcher_Deleted(object sender, System.IO.FileSystemEventArgs e) {
      MessageBox.Show(string.Format("刪除一個{0}檔案",e.Name), this.Text);
    }
    private void FileWatcher_Renamed(object sender, System.IO.RenamedEventArgs e) {
      MessageBox.Show(string.Format("檔案{0}被改名為{1}",e.OldFullPath,e.FullPath), this.Text);
    }
     
    最後您可以使用EnableRaisingEvents屬性來開始或停止監視;若設定成true,表示開始監視;若設定成false,則表示停止監視。大部分的的監視系統都會實作成Windows Service,以背景執行(常駐)的方式來進行監視。當受監控的目錄或檔案發生異動時,您可以利用Net Send或email通知相關人員,或者紀錄在事件檢視簿或效能計數器中,以便進行後續的分析與處理。