Có thể khi hoạt động của tệp được gọi bằng cách nào đó - như mở hay đóng - tôi có thể xử lý nó trước khi yêu cầu được hệ điều hành thực hiện và nếu có thể hủy nó theo .NET? Nếu .NET không có khả năng như thế, làm thế nào tôi có thể làm được điều này?Có thể theo dõi các thao tác tệp bằng .NET không?
Trả lời
gì hỏi của bạn để làm có thể được thực hiện. Ví dụ, máy quét vi-rút, luôn làm như vậy. Bạn có thể dễ dàng theo dõi hoạt động của tệp bằng Process Monitor. Bạn cũng có thể làm điều đó theo chương trình trong C# bằng cách sử dụng FileSystemWatcher Class. Nhưng cố gắng để ngăn chặn một chương trình từ mở hoặc cố gắng để ngăn chặn một chương trình truy cập vào các tập tin không thể được thực hiện trong C#. Bạn sẽ cần phải sử dụng C hoặc C++. Bạn cần tạo một File System Filter Driver. Đó là một điều phức tạp để xây dựng nhưng chính xác những gì bạn cần. Để báo giá MSDN:
A file system filter driver intercepts requests targeted at a file system or another file system filter driver. By intercepting the request before it reaches its intended target, the filter driver can extend or replace functionality provided by the original target of the request. Examples of file system filter drivers include anti-virus filters, backup agents, and encryption products.
Bạn có thể móc Windows API nếu muốn. Kiểm tra theo cách này để làm điều đó trong .NET/C#:
Sysinternals cung cấp một công cụ miễn phí có tên Process Monitor, một chức năng trong số đó là để đính kèm vào quá trình tùy ý Windows (bao gồm cả các ứng dụng .NET) và chụp cuộc gọi hệ thống, bao gồm cả tệp đang mở, đóng, đọc, v.v.
Bạn có thể tải xuống tệp tại số Process Monitor Download Page.
EDIT
Khi tôi đọc lại câu hỏi của bạn, tôi thấy bạn đang hỏi về việc chặn và có thể hủy các thao tác đó. Tôi tin rằng các lớp học FileSystemWatcher
sẽ là đặt cược tốt nhất của bạn, mặc dù tôi không nghĩ rằng nó có thể hủy bỏ các hoạt động tập tin đơn phương - bạn cần phải xây dựng một số loại cơ chế hợp tác để báo hiệu người gọi để hủy bỏ hoạt động của nó.
Tôi khá chắc chắn rằng bạn đã có để có được vào hạt nhân vào loại hoạt động và tôi khá chắc chắn rằng có nghĩa là bạn sẽ cần phải mã trong C. Nhìn vào File System Drivers.
CẬP NHẬT: điều này SO link có thể trợ giúp.
UPDATE: thêm một tìm kiếm google cho Windows File System Drivers
CŨNG What is a good resource to get started with Windows file system driver development?
- 1. Thao tác các tệp MIDI bằng Python
- 2. Theo dõi các chủ đề .NET
- 3. .Net Tên tệp theo dõi tùy chỉnh
- 4. Tại sao các tệp không thể được thao tác bằng inode?
- 5. Thao tác theo dõi của người dùng trong một ứng dụng doanh nghiệp
- 6. Thao tác thao tác không kích hoạt
- 7. Có thể theo dõi phân bổ/deallocation không?
- 8. PyV8, tôi có thể thao tác cấu trúc DOM không?
- 9. Tạo RPM cũng có thể thao tác các tệp và thêm người dùng
- 10. Vẫn có thể khôi phục các tệp đã bị xóa không được theo dõi trong git?
- 11. Theo dõi các tác vụ đã hoàn thành trong ExecutorService
- 12. Thao tác tệp Python từ C#
- 13. Theo dõi các biến thể mã nguồn
- 14. Có thể thực hiện thao tác danh sách bằng LINQ không?
- 15. Không thể phát hành các câu lệnh thao tác dữ liệu bằng executeQuery()
- 16. Thao tác bằng số sử dụng chuỗi
- 17. Thao tác cắt tệp trong Java
- 18. Thao tác bằng Python và văn bản
- 19. Git cam kết -a "các tệp không được theo dõi"?
- 20. Các mẫu thao tác Bytecode
- 21. Thao tác .NET CIL của ngăn xếp đánh giá
- 22. Thao tác hình ảnh bằng Javascript?
- 23. Các lọ có thể chạy được (thông qua Eclipse) có chứa thông tin theo dõi không?
- 24. đổi tên tệp theo dõi/xóa bằng FSEvents trên Lion
- 25. C# Có LINQ to HTML hay một số API thao tác HTML .Net tốt khác không?
- 26. Theo dõi/theo dõi của HABTM theo dõi/theo dõi
- 27. Bash: thao tác bằng các chuỗi (ký hiệu phần trăm)
- 28. Git có theo dõi Phiên bản không?
- 29. Cách tốt nhất để thao tác XML trong .NET
- 30. Tôi có thể sử dụng git diff trên các tập tin không được theo dõi không?
Liên kết không còn hoạt động. –
@ JamesWilkins nó phải là tạm thời. Cả hai liên kết chỉ làm việc cho tôi. Tốt – kenny