C# - Lắng Nghe Các Thông Báo Thay Đổi Của Hệ Thống Tập Tin

Trong một số trường hợp, chúng ta muốn liên tục cập nhật thông tin về sự thay đổi của một tập tin hoặc thư mục nào đó cho người dùng và chúng ta không muốn dùng While(true) để liên tục quét đối tượng xem có thay đổi gì hay không thì cách làm sau đây là tối ưu cho nhu cầu trên.



Chúng ta sẽ tìm hiểu về FileSystemWatcher- lớp này cho phép chúng ta lắng nghe mọi sự thay đổi của một tập tin hoặc một thư mục trên HDD, mọi sự thay đối có thể là: Xóa, Đổi tên, Thêm mới, Sửa nội dung, ...



Mời các bạn xem qua ví dụ sau

[code language="csharp"]
static void Main(string[] args)
{
//Watching thư mục
RunWatcher();

Console.Read();
}

[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
public static void RunWatcher()
{
//Get đường dẫn
string path = System.Environment.CurrentDirectory;

//Check đường dẫn
if (path.Length < 2)
{
Console.WriteLine("Directory is not correct");
return;
}

//Tạo FileSystemWatcher
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = path;

//Chỉ watch cho các file txt
//watcher.Filter = "*.txt";
//Chỉ watch cho all file
watcher.Filter = "*.*";

//Đăng ký event
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnRenamed);

//Begin watching.
watcher.EnableRaisingEvents = true;
Console.WriteLine("Directory is {0}",path);
}

//Define event
private static void OnChanged(object source, FileSystemEventArgs e)
{
Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
}

private static void OnRenamed(object source, RenamedEventArgs e)
{
Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
}
[/code]

Chúc các bạn thành công!
Phạm Tuân


Chúc các bạn thành công!
PHẠM TUÂN