FileSystemWatcher可以在某個資料夾有檔案異動時,觸發事件,然後可以針對這些檔案做這些事,直覺就想到我在匯入相機的照片時,檔名都不是我想要的,所以就寫個小程式讓我再copy檔案時,能直接搬移這些檔案並更名。
FileSystemWatcher共用以下事件可用(圖片來自MSDN)
本例使用Created來實現,首先新增一個Windows Form專案,並在初始化後撰寫以下Code:
public Form1() { InitializeComponent(); //設定針測的檔案類型,如不指定可設定*.* FileSystemWatcher watch = new FileSystemWatcher(OriginAlbum, "*.jpeg"); //開啟監聽 watch.EnableRaisingEvents = true; //是否連子資料夾都要偵測 watch.IncludeSubdirectories = true; //新增時觸發事件 watch.Created += watch_Created; } void watch_Created(object sender, FileSystemEventArgs e) { string DirectPath = e.FullPath; //TODO 實做抓取檔案,並移動更名檔案 }
e.FullPath就可以接到該目錄,就可以實做一些事
完整程式碼: string OriginAlbum = @"D:\temp2"; //針測的資料夾 string NewAlbum = @"D:\Album"; //搬移後的資料夾 public Form1() { InitializeComponent(); //設定針測的檔案類型,如不指定可設定*.* FileSystemWatcher watch = new FileSystemWatcher(OriginAlbum, "*.jpeg"); //開啟監聽 watch.EnableRaisingEvents = true; //是否連子資料夾都要偵測 watch.IncludeSubdirectories = true; //新增時觸發事件 watch.Created += watch_Created; } void watch_Created(object sender, FileSystemEventArgs e) { string DirectPath = e.FullPath; //如果偵測到為檔案,則依路徑對此資料夾做檔案處理 if (IsFilePath(DirectPath)) { string fileFormat = "{0}-{1}.jpeg"; //檔名格式 string FileDate = DateTime.Today.ToShortDateString(); string CreateAlbum = NewAlbum + @"\" + FileDate; string DirectoryName = Path.GetDirectoryName(e.FullPath); //該檔案的資料夾名稱 var files = Directory.GetFiles(DirectoryName, @"*.*"); //取得資料夾所有檔案 //如果該資料夾存在檔案,則刪除檔案 if (System.IO.Directory.Exists(CreateAlbum)) { DeleteAllFile(CreateAlbum); } else { System.IO.Directory.CreateDirectory(CreateAlbum); } int i = 0; foreach (string f in files) { Console.WriteLine("task:"+f); //依順序改檔名 System.IO.Directory.CreateDirectory(DirectoryName); string fileCount = (++i).ToString("D3"); string newFileName = System.IO.Path.Combine(CreateAlbum, string.Format(fileFormat, FileDate, fileCount)); //搬移ReName後的檔案 System.IO.File.Move(f, newFileName); } } }
--
Reference
http://msdn.microsoft.com/zh-tw/library/system.io.filesystemwatcher.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2
http://www.dotblogs.com.tw/dotnetfactory/archive/2008/04/10/2780.aspx
http://www.dotblogs.com.tw/yc421206/archive/2009/01/18/6861.aspx
http://www.dotblogs.com.tw/jaigi/archive/2013/08/21/115097.aspx
沒有留言:
張貼留言