2010-07-08 22 views
9

Tuyên bố từ chối trách nhiệm: Tôi chủ yếu là nhà phát triển web/linux.Chúng tôi có thể xóa một tệp mở trong Windows không?

Windows có tính năng "đẹp" này khi từ chối quyền xóa bất kỳ tệp nào được mở bởi bất kỳ quá trình nào. Vì vậy, nếu một phần mềm chống vi-rút truy cập sai tệp vào thời điểm sai, một số chương trình ngẫu nhiên có thể bị lỗi và có thể bị lỗi.

Tôi có đúng không? Có kế hoạch sửa lỗi này không?

Có ai trong số các bạn thấy điều này có thể chấp nhận được không, hoặc, làm thế nào nó có thể có vẻ là một ý tưởng hay vào thời điểm đó?

Chỉnh sửa:

Nó hoạt động rất khác trên Unix và đã tồn tại hàng thập kỷ.

Như một ví dụ:

  • quá trình 1 mở foo.txt, để đọc hoặc viết, hoặc cả hai, không quan trọng
  • quá trình 2 xóa các tập tin
  • tập tin bị hủy liên kết từ hệ thống tập tin
  • quy trình 1 tiếp tục đọc và/hoặc ghi, tệp vẫn tồn tại và có thể phát triển miễn là có chỗ trên đĩa. Nó chỉ là không thể truy cập từ các quy trình khác mà chưa có một tập tin xử lý nó.
  • khi quá trình 1 đóng tập tin, nó sẽ không thể truy cập từ bất cứ nơi nào

Trên thực tế, một mô hình sử dụng phổ biến cho các tập tin tạm thời trên Unix là: open-remove-read/write-gần.

+1

Ngược lại với việc xóa tệp mà quy trình khác sử dụng mà không có cảnh báo, điều này chắc chắn sẽ không khiến chương trình đó hoạt động không đúng và có thể bị lỗi. Có những chương trình như trình mở khóa cho phép bạn đóng các tệp xử lý, nhưng tôi không thể biết cách xóa tệp đang sử dụng là một ý tưởng hay. – IVlad

+0

Nhưng, nếu ai đó xóa một tệp đang xử lý 1 đang sử dụng, làm cách nào để xử lý 1 lỗi hoặc sự cố?Các tập tin vẫn còn đó, có thể được đọc hoặc viết, nó chỉ là không có sẵn nếu bạn không có một filehandle đã mở. –

+1

Nó chỉ là một trong nhiều quyết định triết học mà hai nền tảng khác nhau. Cả hai phương pháp đều có ưu và khuyết điểm của họ, mặc dù cá nhân tôi không tìm thấy một trong hai phương pháp để được tổng thể tốt hơn hoặc tồi tệ hơn khác. Khi bạn phát triển cho một nền tảng, bạn cần phải nhận thức được tính đồng nhất và xử lý chúng một cách thích hợp. Nếu bạn không làm điều này và chương trình của bạn bị treo thì chương trình của bạn có lỗi, không phải nền tảng. – Luke

Trả lời

5

Tuyên bố ban đầu của bạn không chính xác. Windows không cho phép xóa các tệp đang mở. Bạn chỉ cần chỉ định FILE_SHARE_DELETE và bạn đã sẵn sàng. Các lập trình viên cẩn thận nên quyết định một cách hợp lý nếu lá cờ đó (hoặc chia sẻ để đọc/viết) có ý nghĩa và vượt qua nó.

Sản phẩm chống vi rút không mở tệp có chia sẻ đầy đủ (bao gồm cả xóa) được bật là lỗi.

Windows, tuy nhiên, hãy nhớ thư mục làm việc hiện tại của bất kỳ quá trình nào và ngăn không cho nó bị xóa. Thư mục làm việc này độc lập với vị trí của bất kỳ tệp nào được mở bởi quy trình.

+0

Nếu nó có nghĩa là lời xin lỗi về những gì Windows làm, tôi nghĩ rằng nó là thiếu sót. Bất kỳ chương trình nào cũng có thể phá vỡ bất kỳ chương trình nào khác mà không cần đến chương trình đó. Trình quản lý tệp chỉ mở trên thư mục ngắt trình cài đặt đang cố xoá và tạo lại cùng một thư mục đó. – eudoxos

+0

@eudoxos: Bạn có nghĩa là Windows ngăn chặn việc xóa thư mục cho tất cả các thư mục đang hoạt động như thế nào? Bạn đã đọc http://blogs.msdn.com/b/oldnewthing/archive/2010/11/09/10087919.aspx chưa? Cá nhân, tôi cũng cảm thấy khó chịu vì điều này, nhưng dường như không có giải pháp kỹ thuật nào cho điều này. – mafu

+0

@eudoxos: Về "mở trong trình quản lý tệp", có vẻ như không phải là trường hợp. Ít nhất Windows Explorer không ngăn thư mục hiện được hiển thị của nó bị xóa. – mafu

0

Điều này hoàn toàn có thể chấp nhận được. Hãy tưởng tượng một tình huống mà bạn đang đọc một tệp cơ sở dữ liệu trong ứng dụng của bạn, và một số ứng dụng khác đi kèm và xóa tệp cơ sở dữ liệu đó ngay bên dưới bạn. Ứng dụng của bạn biết cách kiểm tra xem tệp đó có còn tồn tại không? Làm thế nào nó sẽ đảm bảo rằng các luồng tập tin không phải là tất cả của một nỗ lực đột ngột để đọc tập tin đó có thể có một phần nghìn giây, nhưng không phải là tiếp theo? Đây là lý do tại sao các chương trình có thể khóa các tập tin, để đảm bảo rằng các tập tin sẽ luôn luôn có cho đến khi chương trình xác định rằng nó được thực hiện với nó.

Có thể hữu ích hơn khi cho chúng tôi biết lý do tại sao tệp này bị khóa là không mong muốn trong trường hợp của bạn. Tôi khá chắc chắn chương trình chống virus làm một khóa lạc quan trên các tập tin, trừ khi nó làm sạch chúng.

+1

Nó giống như kéo nền tảng ra từ bên dưới một ngôi nhà. –

+0

chỉnh sửa cho rõ ràng –

+0

Mọi hoạt động I/O của tệp có thể báo hiệu lỗi, do đó, trừ khi bạn đã cẩu thả về việc kiểm tra chúng, sẽ không có kiểm tra bổ sung để thực hiện. –

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