Có cách nào đơn giản để phát hiện xem tệp có được mở trong bất kỳ quy trình nào trong Windows không?Cách lập trình để phát hiện xem tệp có được mở trong Windows không?
Ví dụ: tôi đang theo dõi thư mục và nếu tệp được đặt vào thư mục, tôi muốn thực hiện một số thao tác trên các tệp này.
Tôi không muốn thực hiện các tác vụ này, nếu các tệp vẫn đang được sao chép vào thư mục hoặc nếu nội dung của các tệp này vẫn đang được cập nhật.
Vì vậy, những gì đang xảy ra là đặt tên tệp, tôi muốn triển khai hàm, chẳng hạn như hàm IsFileOpenedAnywhereElseInAnyProcess(const PathName: string): Boolean
, trả về true
hoặc false
.
Một trong những cách tôi có thể nghĩ ra, là để đổi tên tập tin, và nếu đổi tên thành công, không có quy trình khác đã mở các tập tin Tôi quan tâm đến, như vậy:
function IsFileOpenedAnywhereElseInAnyProcess(const PathName: string): Boolean;
begin
Result := not (MoveFileEx(PathName, PathName+'.BLAH', 0) and MoveFileEx(PathName+'.BLAH', PathName, 0));
end;
Logic là nếu tôi có thể đổi tên tập tin (để mở rộng khác) sau đó đổi tên nó trở lại, nó không được mở bởi bất kỳ quá trình khác (tại thời điểm kiểm tra).
Cảm ơn.
Bạn đang sử dụng C++, C#? –