2011-12-06 45 views
11

Chức năng Windows API CreateFile cho phép bạn xác định quyền truy cập mong muốn. Có ba tùy chọn read, write and delete. Nếu bạn nhận được một xử lý từ CreateFile yêu cầu xóa truy cập như thế nào để bạn sau đó xóa các tập tin bằng cách sử dụng xử lý trả về? Hàm DeleteFile lấy tên tệp, không phải là xử lý.Xóa hoặc Đổi tên tệp bằng tay cầm mở

Ảnh lớn: Khi lưu tệp từ ứng dụng của tôi, trước tiên tôi xóa tệp "thực" và đổi tên tệp tạm thời thành tên thật. Tôi đã bắt đầu thấy vấn đề với các chỉ mục tìm kiếm, hoặc chống vi-rút/phần mềm gián điệp mở tệp để đọc nhưng không cho phép xóa. Điều này làm cho lưu của tôi thất bại khi di chuyển các tập tin xung quanh. Tôi đã thay đổi mã mở để yêu cầu xóa quyền truy cập để đảm bảo rằng tôi có thể xóa tệp khi đến lúc lưu.

Tất cả đều hoạt động tốt nhưng tôi vẫn có khoảng trống nơi ứng dụng của bên thứ ba có thể lấy tệp của tôi. Vì tôi có một xử lý mở cho cả tệp tạm thời và thực, tôi đang tìm cách thực hiện các chức năng xóa và đổi tên bằng cách sử dụng các chốt đó. Tùy chọn duy nhất tôi có thể tìm thấy là đóng các chốt và sau đó gọi các hàm DeleteFile và MoveFile. Thực ra tôi hiện đang sử dụng hàm ReplaceFile API để thực hiện các bước đó, nhưng nó cũng có tên tệp được chuyển vào và sẽ không hoạt động trừ khi tôi đóng các xử lý của mình trước.

Tôi vẫn cần hỗ trợ XP và không thể bắt đầu sử dụng các chức năng tệp giao dịch mới. Có cách nào để giữ cho các tập tin bị khóa và vẫn xóa/đổi tên chúng?

Trả lời

6

Trong Windows Vista, có chức năng SetFileInformationByHandle, có thể thực hiện những gì bạn cần.

Trong các phiên bản trước của Windows, không có chức năng như vậy, nhưng bạn có hàm gốc tương đương, chứ không phải chức năng khá công khai NtSetInformationFile.

Tôi không có kinh nghiệm với các chức năng này, cũng như máy Windows để kiểm tra chúng, vì vậy tôi không thể hiển thị mã cho bạn, nhưng điều đó không quá khó.

Tuyên bố miễn trừ chung về các hàm Windows nguyên gốc sẽ áp dụng, tất nhiên.

+0

Cảm ơn, đó chỉ là những gì tôi cần. –

Các vấn đề liên quan