2012-06-17 16 views
21

Cho đến nay tôi biết rằng FileSystemWatcher có thể xem trong một thư mục và nếu có bất kỳ tệp nào bên trong thư mục đó bị thay đổi, sửa đổi, .etc ... thì chúng tôi có thể xử lý nó. Nhưng tôi không chắc bộ lọc và sự kiện nào tôi nên sử dụng trong kịch bản của mình: Xem thư mục, Nếu tệp được thêm vào thư mục đó, hãy làm XYZ ... Vì vậy, trong kịch bản của tôi, tôi không quan tâm nếu tệp hiện có là thay đổi, vv .. nên bỏ qua ... chỉ làm XYZ nếu và chỉ khi một tệp mới đã được thêm vào Thư mục đó ...Tôi cần sử dụng bộ lọc nào của FileSystemWatcher để tìm tệp mới

Bạn đã đề xuất sự kiện và bộ lọc nào cho trường hợp này?

+3

những gì đang bỏ phiếu cho?!?! – Bohn

Trả lời

12

Thiết lập watcher:

FileSystemWatcher watcher = new FileSystemWatcher(); 
watcher.Path = "Blah"; 

watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite 
    | NotifyFilters.FileName; 

watcher.Created += new FileSystemEventHandler(OnChanged); 

watcher.EnableRaisingEvents = true; 

Sau đó thực hiện các FileCreated đại biểu:

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

Tại sao chúng ta đặt 'NotifyFilter' nếu chúng ta chỉ quan tâm đến một tệp đang được tạo, không thay đổi? –

+5

@JeffBridgman Nó không trực quan, nhưng NotifyFilter phục vụ như một cách để tinh chỉnh các thông báo đến từ FileSystemWatcher. Theo mặc định, NotifyFilter được đặt thành DirectoryName | Tên tệp | LastWrite. Các tính năng này cung cấp cho bạn khả năng nhận các hoạt động tệp lõi mà bạn mong đợi từ FileSystemWatcher: Đã tạo, Thay đổi, Đã xóa và Đổi tên. Thông báo Bộ lọc có thể được thay đổi để tăng phổ thuộc tính của tệp/thư mục sẽ được theo dõi và sử dụng làm đầu vào để kích hoạt các sự kiện khác nhau. Mặc dù, như bạn có thể phỏng đoán, hầu hết các bộ lọc khác sẽ chỉ dẫn đến sự kiện "Đã thay đổi" – CobaltBlue

+11

Câu trả lời của Stackoverflow hoàn toàn tốt hơn so với hầu hết các trang web khác có thể tìm thấy Googling khi câu trả lời SO được bình chọn và cập nhật theo thời gian. –

3

Xin hãy vào đây để giải thích chi tiết của FileSystemWatcher: http://www.c-sharpcorner.com/uploadfile/mokhtarb2005/fswatchermb12052005063103am/fswatchermb.aspx

Bạn sẽ phải tìm kiếm cho các tập tin được tạo ra nếu bạn muốn tìm kiếm cho các tập tin bổ sung.

Bạn chỉ định loại thay đổi để xem bằng cách đặt giá trị của liệt kê WatcherChangeType. Các giá trị có thể có như sau:

  • Tất cả: Tạo, xóa, thay đổi hoặc đổi tên tệp hoặc thư mục.
  • Đã thay đổi: Thay đổi tệp hoặc thư mục. Các loại thay đổi bao gồm: thay đổi về kích thước, thuộc tính, cài đặt bảo mật, ghi lần cuối và thời gian truy cập cuối cùng.
  • Đã tạo: Tạo tệp hoặc thư mục.
  • Đã bị xóa: Xóa tệp hoặc thư mục.
  • Đã đổi tên: Đổi tên tệp hoặc thư mục.

Ngoài ra bạn có thể chỉ cấp điện cho xử lý sự kiện rằng đám cháy nếu một tập tin được tạo ra (gia tăng) và không thực hiện tất cả các sự kiện khác vì chúng là không thú vị dành cho bạn:

watcher.Created += new FileSystemEventHandler(OnChanged);