2008-11-05 33 views
66

Tôi có một thư mục rác nơi tôi tải các bản tải xuống, các dự án một lần, bản nháp email và nhiều thứ khác có thể hữu ích trong vài ngày nhưng không cần phải lưu vĩnh viễn. Để ngăn thư mục này lấy máy của tôi, tôi đã viết một chương trình sẽ xóa tất cả các tệp cũ hơn số ngày được chỉ định và ghi lại một số thống kê về số lượng tệp đã bị xóa và kích thước của chúng chỉ để giải trí.Làm cách nào để xóa tệp chỉ đọc?

Tôi nhận thấy rằng một vài thư mục dự án đang sống lâu hơn thời gian nên, vì vậy tôi bắt đầu điều tra. Đặc biệt, có vẻ như các thư mục cho các dự án mà tôi đã sử dụng SVN đang gắn bó xung quanh. Nó chỉ ra rằng các tập tin chỉ đọc trong thư mục .svn không bị xóa. Tôi vừa làm một thử nghiệm đơn giản trên một tệp chỉ đọc và phát hiện rằng System.IO.File.DeleteSystem.IO.FileInfo.Delete sẽ không xóa tệp chỉ đọc.

Tôi không quan tâm đến việc bảo vệ tệp trong thư mục cụ thể này; nếu một cái gì đó quan trọng là ở đó nó ở sai chỗ. Có một lớp .NET có thể xóa các tập tin chỉ đọc, hay tôi sẽ phải kiểm tra các thuộc tính chỉ đọc và loại bỏ chúng?

+2

Tôi đã thay đổi câu trả lời chấp nhận vì Gulzar của mẫu mã là chi tiết hơn so với của Tim Stewart. Nên đã chọn một trong những nơi đầu tiên nhưng đối với một số lý do tôi thích của Tim tốt hơn. Mọi người là những điều kỳ lạ! – OwenP

+4

+1 dành thời gian để làm cho mọi thứ tốt hơn một chút ngay trong vũ trụ. Nếu chỉ các nhà phát triển của tôi mới quay trở lại và sửa chữa những vi phạm nhỏ của chúng tôi, chúng tôi có thể hủy bỏ các lớp Lập trình sửa chữa! –

Trả lời

133

Thêm một số mẫu mã để Tim của câu trả lời:

using System.IO; 

File.SetAttributes(filePath, FileAttributes.Normal); 
File.Delete(filePath); 
+0

Bạn nhận được một upvote cho là đúng, nhưng câu trả lời của bạn đến sau khi Tim Stewart của mà nói cùng một điều. – OwenP

+3

tốt. Tim xứng đáng với nó. nghĩ rằng một số mã sẽ giúp. –

+0

Trong một số trường hợp, bạn cũng có thể cần sở hữu tệp trước khi bạn có thể xóa cờ chỉ đọc hoặc xóa nó. Xem http://stackoverflow.com/questions/12999272/ để biết chi tiết. –

2

Tại sao bạn cần kiểm tra? Chỉ cần ép buộc cờ chỉ đọc và xóa tệp.

1

Hm, tôi nghĩ rằng tôi muốn đưa

>del /F * 

vào một nhiệm vụ sheduled. Có thể được bao bọc bởi một tập tin thực thi để ghi lại số liệu thống kê.

Tôi có thiếu gì đó không?

+0

Có. Anh ấy muốn xóa một tệp khi nó ở độ tuổi cụ thể. Không phải tất cả các tệp đều theo từng giai đoạn. –

+0

Anh ấy không muốn xóa tất cả các tệp, chỉ tất cả các tệp cũ hơn một khoảng thời gian nhất định. –

46

Theo File.Delete's documentation,, bạn sẽ phải loại bỏ thuộc tính chỉ đọc. Bạn có thể đặt thuộc tính của tệp bằng cách sử dụng File.SetAttributes().

+0

Tôi chấp nhận cái này trước tiên. – OwenP

+29

Nó không phải là về đầu tiên. – VVS

16

Tương đương nếu bạn tình cờ được làm việc với một đối tượng FileInfo là:

file.IsReadOnly = false; 
file.Delete(); 
Các vấn đề liên quan