• 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#

Điều hành viên: tungcan5diop, QUANITGROBEST

Hình đại diện của người dùng
QuanGL
VIP
VIP
Bài viết: 76
Ngày tham gia: T.Năm 04/01/2007 7:37 pm
Đến từ: Hành tinh thứ tư tính từ Mặt Trời ^^!
Been thanked: 4 time

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

Gửi bàigửi bởi QuanGL » T.Sáu 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ụ:

Mã: Chọn hết

  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:

Mã: Chọn hết

  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);
Tập tin đính kèm
FSW.rar
FileSystemWatcher
(14.95 KiB) Đã tải 1185 lần


I'm in the mood for love

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

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

Gửi bàigửi bởi anhtuyenbk » T.Sáu 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 ;))
Hình ảnh
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

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

Gửi bàigửi bởi anhtuyenbk » T.Bảy 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

Hình đại diện của người dùng
QuanGL
VIP
VIP
Bài viết: 76
Ngày tham gia: T.Năm 04/01/2007 7:37 pm
Đến từ: Hành tinh thứ tư tính từ Mặt Trời ^^!
Been thanked: 4 time

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

Gửi bàigửi bởi QuanGL » T.Bảy 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
Bài viết: 24
Ngày tham gia: T.Sáu 23/05/2008 4:47 pm

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

Gửi bàigửi bởi ad23 » T.Bảy 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
Bài viết: 1
Ngày tham gia: T.Ba 22/04/2008 10:02 pm

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

Gửi bàigửi bởi zazabovn » T.Bảy 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();
}
}
}


Hình đại diện của người dùng
andylam1992
Thành viên danh dự
Thành viên danh dự
Bài viết: 380
Ngày tham gia: T.Hai 06/04/2009 12:57 pm
Đến từ: TP.HCM Q5
Has thanked: 2 time
Been thanked: 4 time
Liên hệ:

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

Gửi bàigửi bởi andylam1992 » T.Bảy 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

Hình đại diện của người dùng
DarkProgrammer
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 59
Ngày tham gia: T.Tư 18/06/2008 7:20 pm
Đến từ: Địa ngục
Been thanked: 1 time
Liên hệ:

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

Gửi bàigửi bởi DarkProgrammer » T.Bảy 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
Bài viết: 21
Ngày tham gia: T.Hai 13/02/2012 7:59 pm
Has thanked: 5 time

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

Gửi bàigửi bởi Promane » T.Sáu 06/04/2012 3:18 pm

anhtuyenbk đã viết: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 ;))
Hình ảnh

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 ?


Quay về “[.NET] Bài viết hướng dẫn”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.3 khách