2012-05-04 30 views
7

Có thể truy cập tệp trước khi tệp bị xóa khi sử dụng sự kiện FileSystemWatcher.OnDeleted không?Truy cập tệp trước khi bị xóa

Tôi đang lưu trữ một số dữ liệu về chính tài liệu trong siêu dữ liệu của nó và tôi cần thông tin đó trước khi nó bị xóa.

Bất kỳ Ý tưởng nào về cách thực hiện việc này có hoặc không có FileSystemWatcher nếu nó thậm chí có thể?

Cập nhật: //

tôi nhận ra rằng lưu trữ các dữ liệu trong file là xấu như tôi không thể truy cập vào nó khi tập tin bị xóa.

Giải pháp: viết lại ứng dụng của tôi để lưu trữ các dữ liệu trong một cơ sở dữ liệu địa phương (sqlite/xml hoặc một cái gì đó như thế) như tôi nhận được đường dẫn đầy đủ và tên khi tập tin đang được tạo/đổi tên/cập nhật/xóa nó sẽ dễ dàng hơn để cập nhật hồ sơ cơ sở dữ liệu cho tệp.

Cảm ơn tất cả vì những ý tưởng và đề xuất!

+0

Tôi gần như muốn nói không, bạn không thể vì sự kiện kích hoạt khi tệp đã bị xóa. Tôi không tin rằng FSW có thể biết sự kiện này cho đến khi nó đã hoàn thành, vì điều đó có nghĩa là việc xóa trước thậm chí sẽ cần phải được kích hoạt và bị bắt, và sau đó cho phép bạn tạo khóa trên tệp. –

+0

Tôi không nghĩ rằng có thể chỉ với 'FileSystemWatcher'. Tôi không chắc chắn nếu Windows cho phép một móc cấp thấp hơn (mặc dù tôi nghi ngờ nó.) – dlev

+0

Bạn sẽ nhận được tên đầy đủ từ eventhandler. Sử dụng nó để khôi phục tập tin, làm cho nó vô hình, đọc nó, và xóa nó. hackish và không foolproof, nhưng vẫn còn một cái gì đó: http://stackoverflow.com/questions/2837307/recovering-deleted-file-on-windows – nawfal

Trả lời

2

Có thể truy cập tệp trước khi nó bị xóa khi sử dụng FileSystemWatcher.OnDeleted event?

Sự kiện được kích hoạt sau khi xóa tệp trước đó, vì vậy bạn sẽ không thể truy cập tệp khi sự kiện này được nâng lên.

Bất kỳ ý tưởng nào về cách thực hiện điều này nếu nó thậm chí có thể?

Tôi sẽ sử dụng sự kiện OnChanged thay thế, được kích hoạt mỗi khi tệp thay đổi. Về cơ bản, bạn đọc siêu dữ liệu tệp mỗi khi tệp thay đổi. Điều này có thể hơi cồng kềnh nếu tệp được cập nhật rất thường xuyên nhưng nên cho phép bạn có siêu dữ liệu mới nhất trước khi tệp bị xóa.

+0

OnChanged không nhất thiết phải kích hoạt trước khi OnDelete! – nawfal

+0

cũng không đảm bảo tệp sẽ bị thay đổi trước khi tệp bị xóa. – Aviatrix

+0

@nawfal Xin vui lòng xem bản cập nhật của tôi – GETah

0
FileSystemWatcher1 = Your Main Watcher. 
FileSystemWatcher2 = RecycleBin Watcher 

If the FileSystemWatcher1 Deleted file == the FileSystemWatcher2 Created File 
{ 
    //Do what you want with the FileSystemWatcher2.FullPath 
} 
Các vấn đề liên quan