2010-02-08 28 views
5

Tôi cần xóa tệp. Đôi khi, tệp có thể bị khóa, trong trường hợp này, tôi muốn mở khóa và xóa tệp đó.Làm cách nào để mở khóa một tệp mạnh mẽ trong C#?

Tôi đã xem xét hai khả năng trong nghiên cứu này cho đến nay.

System.IO.FileStream.Unlock

//unlock file 
[DllImport("kernel32.dll", SetLastError = true)] 
internal static extern bool UnlockFile(IntPtr handle, int offsetLow, int offsetHi);` 

một trong hai phương pháp này sẽ làm việc? Nếu vậy, bạn có thể vui lòng cung cấp một mẫu như tôi đã không nhận được một trong những để làm việc. Hoặc, có cách nào tốt hơn không?

Trả lời

0

Đã kết thúc bằng tiện ích PSTools, có vẻ hoạt động tốt.

2

Bạn nên sử dụng các hoạt động tệp bị trì hoãn, xem How To Move Files That Are Currently in Use ('Di chuyển' bao gồm xóa trong ngữ cảnh này).

UnlockFile và bạn bè là dành cho các hoạt động khóa vùng tệp, không dành cho khóa xử lý tệp, xem Locking and Unlocking Byte Ranges in Files. Hopefuly không có API để mở khóa một tập tin xử lý khóa, mà sẽ làm cho khóa khá nhiều useles ...

+2

Khóa tệp Windows là vô ích - nó rất lỗi, các khóa cũ được đặt tại chỗ mọi lúc. – earcam

0

Bạn có thể để cố gắng làm một P/Gọi cuộc gọi đến MoveFileExMOVEFILE_DELAY_UNTIL_REBOOT:

Hệ thống không di chuyển tệp cho đến khi hệ điều hành được khởi động lại. Hệ thống sẽ di chuyển tệp ngay sau khi AUTOCHK được thực hiện, nhưng trước khi tạo bất kỳ tệp hoán trang nào. Do đó, tham số này cho phép chức năng xóa các tệp hoán trang từ các phần khởi động trước đó.

1

Tôi tra cứu cuộc gọi tới System.IO.FileStream.Unlock() trong Trình phản xạ của RedGates và dường như chỉ gọi cuộc gọi bên ngoài là UnlockFile(). Các phương pháp là một trong những giống nhau.

Chiến lược hiện tại của chúng tôi là trì hoãn khi chúng tôi có kỳ vọng hợp lý rằng tệp sắp được mở khóa, nếu không chúng tôi sẽ bị lỗi.

+0

Tôi không hiểu ý của bạn ... –

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