[C#]使用FileSystemWatcher偵測資料夾是否有新增檔案,並移動該檔案
回答論壇問題順便寫了簡單的Sample Code,順便做個小記錄 :P
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://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