Có cách nào để tìm xem tệp có đang mở hay không?Kiểm tra xem tệp có đang mở
Trả lời
protected virtual bool IsFileinUse(FileInfo file)
{
FileStream stream = null;
try
{
stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
return true;
}
finally
{
if (stream != null)
stream.Close();
}
return false;
}
Nếu quá trình không có quyền ghi vào tệp, điều này sẽ tạo ra một kết quả gây hiểu lầm (mở sẽ thất bại, nhưng không nhất thiết là do một tay cầm tồn tại.) Mở để truy cập đọc sẽ ít bị lỗi hơn. – hemp
Thật tuyệt vời khi hầu hết các ngôn ngữ không có phương pháp để kiểm tra tệp đang mở. Chúng tôi đã từng sử dụng cùng một kiểu phương thức trong C++ trong OS/2. tức là cố gắng mở tệp độc quyền. Nó hoạt động đủ tốt, nhưng tôi chưa bao giờ nghĩ nó thanh lịch. – Matt
Nó không phải là một tính năng ngôn ngữ, nó là một tính năng hệ điều hành. Chỉ không tồn tại một API đơn giản (trong Windows) để truy vấn thông tin đó. Có thể nhận được, nhưng nó ở mức độ thấp và có rất nhiều tham số cần phải được xác định để biết điều gì có nghĩa là "mở". – hemp
Như @pranay rana, nhưng chúng ta cần phải chắc chắn rằng chúng tôi đóng xử lý tập tin của chúng tôi:
public bool IsFileInUse(string path)
{
if (string.IsNullOrEmpty(path))
throw new ArgumentException("'path' cannot be null or empty.", "path");
try {
using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read)) { }
} catch (IOException) {
return true;
}
return false;
}
Giống như @pranay rana, tôi đã thử phương pháp này, nhưng nó không phát hiện khi tệp được mở trong Notepad . – James
Nếu bạn có nghĩa là bạn muốn kiểm tra xem một tập tin được mở trước khi bạn cố gắng để mở nó , sau đó thì không. (Ít nhất là không phải không đi mức thấp và kiểm tra mọi xử lý tệp đang mở trong hệ thống.)
Bên cạnh đó, thông tin sẽ cũ khi bạn nhận được. Ngay cả khi thử nghiệm sẽ trả lại rằng tệp không mở, nó có thể đã được mở trước khi bạn có cơ hội sử dụng giá trị trả về.
Vì vậy, cách thích hợp để xử lý tình huống là thử mở tệp và xử lý bất kỳ lỗi nào có thể xảy ra.
Đồng ý. Tôi sẽ tạo ra một lớp được chỉ định mà kết thúc tốt đẹp các logic tập tin mở hoặc ít nhất là thử nghiệm (IsFileAvailable). Điều này sẽ cho phép bạn đặt quản lý ngoại lệ với một lớp cụ thể chịu trách nhiệm và làm cho nó có thể tái sử dụng được. Bạn thậm chí có thể áp dụng thêm logic, chẳng hạn như kiểm tra kích thước tệp để xem tệp có đang được viết thành v.v. hay không, để cung cấp phản hồi chi tiết hơn. Nó cũng sẽ làm cho mã tiêu thụ của bạn sạch hơn nhiều.
- 1. kiểm tra xem tệp nào đang mở trong Python
- 2. Python/win32com - Kiểm tra xem Chương trình có đang mở
- 3. Kiểm tra xem kết nối ADODB có đang mở không
- 4. Ruby - Kiểm tra xem cổng có đang mở
- 5. Kiểm tra xem cổng có đang mở trong ANT
- 6. Kiểm tra xem Chronometer có đang chạy
- 7. Kiểm tra xem ổ cắm có đang nghe trong C
- 8. Delphi: Kiểm tra xem tệp có đang được sử dụng hay không
- 9. Kiểm tra xem tệp có đang được sử dụng hay ứng dụng nào không?
- 10. Kiểm tra xem quy trình có đang chạy
- 11. Ràng buộc Python AppIndicator -> howto kiểm tra xem menu có đang mở không?
- 12. Cách kiểm tra xem các yêu cầu HTTP có đang mở trong trình duyệt không?
- 13. Kiểm tra xem Chú giải Công cụ UI của jQuery có đang mở không
- 14. Kiểm tra xem ứng dụng có đang mở trong sự kiện GCM onMessage không?
- 15. Bảng điều khiển jQuery Mobile - kiểm tra xem nó có đang mở không.
- 16. kiểm tra xem ổ cắm máy chủ có đang mở ở phía bên kia không
- 17. Kiểm tra xem tập lệnh php có đang chạy không
- 18. Kiểm tra xem đường dẫn có đang trên mạng
- 19. kiểm tra xem SKNode có đang chạy SKAction
- 20. Kiểm tra xem phần tử có đang hoạt ảnh CSS3
- 21. Kiểm tra xem trang tính có mở là
- 22. Kiểm tra tệp được mở ở Delphi
- 23. PHP kiểm tra xem tệp có phải là hình ảnh
- 24. Kiểm tra xem tệp có tồn tại trong Yii
- 25. Phát hiện xem tệp có đang mở trong một tệp theo lô hay không
- 26. Cách kiểm tra xem tệp Global.asax có đang được gọi là
- 27. Cách kiểm tra xem một tệp hiện có đang được ghi vào
- 28. VB.NET Kiểm tra xem tệp có mở trước khi tiếp tục đọc/ghi không?
- 29. Kiểm tra xem tệp mở đã bị xóa sau khi mở trong python
- 30. TFS 2010: Kiểm tra tệp mở
Vui lòng cung cấp thêm chi tiết cụ thể. Đã được mở bởi quá trình của bạn, hoặc quá trình khác? Thời gian mở, hoặc chỉ mở bằng quyền ghi? Điều gì về việc chia sẻ? vv Câu hỏi này quá mơ hồ. – hemp