• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

[C#]Theo dõi hệ thống file/folder để phát hiện thay đổi

Các bài viết hướng dẫn về Visual Basic .NET và C#

Moderators: tungcan5diop, QUANITGROBEST

User avatar
QuanGL
VIP
VIP
Posts: 76
Joined: Thu 04/01/2007 7:37 pm
Location: Hành tinh thứ tư tính từ Mặt Trời ^^!
Been thanked: 4 times

[C#]Theo dõi hệ thống file/folder để phát hiện thay đổi

Postby QuanGL » Fri 25/04/2008 9:01 pm

Tên bài viết: [C#]Theo dõi hệ thống file/folder để phát hiện thay đổi
Tác giả: QuanGL
Cấp độ bài viết: Căn bản
Tóm tắt: Sử dụng FileSystemWatcher trong ứng dụng


+ Khi bạn muốn biết 1 file/folder đã được thay đổi (tạo mới, xóa, đổi tên, thay đổi thuộc tính), bạn sẽ định kỳ quét qua 1 folder? Điều này thật không tưởng và tốn nhiều tài nguyên hệ thống. Một cách tiện nhất là sử dụng lớp FileSystemWatcher (FSW) để nhận biết trực tiếp các sự kiện trên file/folder của Windows.
+ Khởi tạo thành phần sử dụng cho lớp FSW, sử dụng một trong những cách sau:
  • //Cách thường dùng:
    FileSystemWatcher watch = new FileSystemWatcher();
  • //Khởi tạo với đường dẫn chỉ định (ở đây là ổ đĩa C)
    FileSystemWatcher watch = new FileSystemWatcher("c:\\");
  • //Khởi tạo với đường dẫn và thuộc tính lọc (Filter)
    FileSystemWatcher watch = new FileSystemWatcher("c:\\","*.txt");
+ Thuộc tính:
    * Path - đường dẫn tới folder muốn theo dõi.
    * EnableRaisingEvents - hiệu lực/vô hiệu phát sinh sự kiện khi có thay đổi.
    * Filter - bộ lọc file, mặc định là (*.*)
    * IncludeSubdirectories - vô hiệu/hiệu lực theo dõi cả folder con.
    * InternalBufferSize - kích thước của bộ đệm. Mặc định: 8K.
    * NotifyFilter - Bộ lọc sử dụng đến khi có thay đổi trên file/folder. Thuộc tính này có thể được thiết lập bằng cách kết hợp các giá trị thuộc kiểu liệt kê: Attributes, CreationTime, DirectoryName, FileName, LastWrite, LastAccess, SecuritySize.
+ Ví dụ:

Code: Select all

  1. FileSystemWatcher myWatcher = new FileSystemWatcher();
  2. myWatcher.Path = "c:\\";
  3. myWatcher.Filter = "*.txt";
  4. myWatcher.EnableRaisingEvents = true;
  5. myWatcher.IncludeSubdirectories = false;
  6. myWatcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Size;

+ Khởi tạo sự kiện:
    * Created - file/folder vừa được tạo ra.
    * Deleted - file/folder vừa bị xóa đi.
    * Renamed - file/folder đã đổi sang tên khác.
    * Changed - file/folder đã thay đổi: kích thước, thuộc tính, truy cập cuối, ghi cuối hoặc chế độ bảo mật (với NTFS).
+ V/d:

Code: Select all

  1. //Sự kiện khi thay đổi
  2. myWatcher.Changed += new FileSystemHandler(myWatcher_Changed);
  3. //Sự kiện khi tạo mới
  4. myWatcher.Created += new FileSystemHandler(myWatcher_Created);
  5. //Sự kiện khi xóa
  6. myWatcher.Deleted += new FileSystemHandler(myWatcher_Deleted);
  7. //Sự kiện khi đổi tên
  8. myWatcher.Renamed += new RenamedEventHandler(myWatcher_Renamed);
Attachments
FSW.rar
FileSystemWatcher
(14.95 KiB) Downloaded 1210 times


I'm in the mood for love

User avatar
anhtuyenbk
Guru
Guru
Posts: 1311
Joined: Thu 22/09/2005 4:12 pm
Location: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

Re: [C#]Theo dõi hệ thống file/folder để phát hiện thay đổi

Postby anhtuyenbk » Fri 25/04/2008 9:41 pm

Hay quá để thử nghiên cứu ưng dụng vô cái FolderTree thử xem :D :D
Giờ đang nghiên cứu hoàn thành cái FileView ;))
Image
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

User avatar
anhtuyenbk
Guru
Guru
Posts: 1311
Joined: Thu 22/09/2005 4:12 pm
Location: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

Re: [C#]Theo dõi hệ thống file/folder để phát hiện thay đổi

Postby anhtuyenbk » Sat 26/04/2008 9:12 pm

À, cho mình hỏ thêm một vấn đề nữa là có cách nào theo dõi sự phát hiện của ổ đĩa ko ví dụ khi cắm USB vào chẳng hạn.
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

User avatar
QuanGL
VIP
VIP
Posts: 76
Joined: Thu 04/01/2007 7:37 pm
Location: Hành tinh thứ tư tính từ Mặt Trời ^^!
Been thanked: 4 times

Re: [C#]Theo dõi hệ thống file/folder để phát hiện thay đổi

Postby QuanGL » Sat 26/04/2008 10:32 pm

http://www.codeproject.com/KB/system/DriveDetector.aspx
Anh có thể tham khảo 1 cách ở đây :D
I'm in the mood for love

ad23
Thành viên chính thức
Thành viên chính thức
Posts: 24
Joined: Fri 23/05/2008 4:47 pm

Re: [C#]Theo dõi hệ thống file/folder để phát hiện thay đổi

Postby ad23 » Sat 14/06/2008 3:02 pm

Hay quá bạn, nó có ứng dụng to lớn trong việc làm các explorer với tree view đó.Nhưng ko biết sử dụng nó như thế nào trong vb nhỉ? :-? :-? :-?

zazabovn
Posts: 1
Joined: Tue 22/04/2008 10:02 pm

Re: [C#]Theo dõi hệ thống file/folder để phát hiện thay đổi

Postby zazabovn » Sat 10/10/2009 10:27 am

Bạn cho mình hỏi khi tại sao trong trường hợp này của mình không chạy nhỉ:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Security.Permissions;
namespace Test_Change_file
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

}
//[PermissionSet(SecurityAction.Demand,Name="FullTrust")]

public void Run()
{
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = @"C:\Test";
watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName
| NotifyFilters.DirectoryName | NotifyFilters.LastAccess;
watcher.Filter = "*.txt";
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnRenamed);

label1.Text = "Thay doi sfsfs";
}
public void OnChanged(object source, FileSystemEventArgs e)
{
// Specify what is done when a file is changed, created, or deleted.
label1.Text = "Thay doi";
}

public void OnRenamed(object source, RenamedEventArgs e)
{
// Specify what is done when a file is renamed.
label1.Text = "Thay doi";
}

private void Form1_Load(object sender, EventArgs e)
{

Run();
}
}
}


User avatar
andylam1992
Thành viên danh dự
Thành viên danh dự
Posts: 380
Joined: Mon 06/04/2009 12:57 pm
Location: TP.HCM Q5
Has thanked: 2 times
Been thanked: 4 times
Contact:

Re: [C#]Theo dõi hệ thống file/folder để phát hiện thay đổi

Postby andylam1992 » Sat 10/10/2009 12:50 pm

watcher.Path = @"C:\Test"; sao dư cái @ vậy??

不相信未作牺牲竟先可拥有
只相信是靠双手找到我欲求
Cần - Kiệm- Liêm(liêm kiết) - Nghĩa - Chí - Tín

User avatar
DarkProgrammer
Thành viên năng nổ
Thành viên năng nổ
Posts: 59
Joined: Wed 18/06/2008 7:20 pm
Location: Địa ngục
Been thanked: 1 time
Contact:

Re: [C#]Theo dõi hệ thống file/folder để phát hiện thay đổi

Postby DarkProgrammer » Sat 04/06/2011 3:32 pm

@ đặt trước 1 chuỗi trong c# dùng để thông báo rằng chuỗi đó sử dụng ký tự đặc biệt '\' như một ký tự bình thường. Nếu không có @ bạn sẽ phải ghi : "C:\\Test"

Promane
Thành viên chính thức
Thành viên chính thức
Posts: 21
Joined: Mon 13/02/2012 7:59 pm
Has thanked: 5 times

Re: [C#]Theo dõi hệ thống file/folder để phát hiện thay đổi

Postby Promane » Fri 06/04/2012 3:18 pm

anhtuyenbk wrote:Hay quá để thử nghiên cứu ưng dụng vô cái FolderTree thử xem :D :D
Giờ đang nghiên cứu hoàn thành cái FileView ;))
Image

Bạn làm cái file view ở trong C# hay sao vậy ? có thể hướng dẫn cho mình một chút không ?


Return to “[.NET] Bài viết hướng dẫn”

Who is online

Users browsing this forum: No registered users and 0 guests