2012-08-08 32 views
8

Ứng dụng cần tạo tệp trong thư mục, thực hiện điều gì đó trong thư mục rồi xóa tệp. Ví dụ, mã nguồn dưới đây:Tạo rồi xóa nguyên nhân tệp IOException

File.Create("textfile.txt"); 
// Do something here 
File.Delete("textfile.txt"); 

Nếu "cái gì đó" là một quá trình mà chỉ cần một lượng thời gian rất ngắn, File.Delete sẽ ném IOException (file đang được sử dụng bởi quá trình khác). Theo một bài SO khác: Cannot delete directory with Directory.Delete(path, true), gọi Thread.Sleep (0) nên cho phép quá trình trước đó kết thúc. Tuy nhiên, ngay cả với

File.Create("textfile.txt"); 
// Do something here 
Thread.Sleep(0); 
File.Delete("textfile.txt"); 

cùng một IOException vẫn được ném.

Giải pháp tôi nhận được là một vòng lặp while cố gắng xóa tệp liên tục cho đến khi nó bị xóa. Nhưng tôi tự hỏi nếu theres 'một giải pháp tốt hơn.

+1

Cảm ơn các câu trả lời rất nhanh (và chỉ ra nó trên MSDN. Tôi chắc chắn không cảm thấy rất tươi sáng ngay bây giờ). Gonna đi với @usr vì anh ấy là người đầu tiên. Nhưng hãy chấp nhận +1 như lời cảm ơn của tôi. – Jim

Trả lời

16

File.Create trả về cho bạn một luồng tệp đại diện cho một tay cầm mở cho tệp đó. Bọc kết quả của cuộc gọi đó trong một khối sử dụng để đóng tay cầm một cách xác định.

21

Phương thức File.Create sẽ tạo luồng tệp mà bạn sẽ cần phải xử lý chính xác. Tôi đề nghị đoạn mã sau:

using(FileStream fs = File.Create("textfile.txt")) 
{ 
    // Do something here. 
} 
File.Delete("textfile.txt"); 

Lưu ý rằng mã này là chính xác như đề xuất trong tài liệu MSDN ...

3

File.Create trả về một FileStream mà là một tay cầm mở cửa cho tập tin đó. Sử dụng điều này thay vì:

using(FileStream fs = File.Create("textfile.txt")) 
{} 

File.Delete("textfile.txt"); 
4

Cũng lưu ý: Nếu bạn không muốn viết bất cứ điều gì vào các tập tin, bạn có thể tránh được "sử dụng" theo hai cách:

(1) File.WriteAllText("textfile.txt", string.Empty); 
(2) File.Create("textfile.txt").Dispose(); 

Trong trường hợp (2) nó là an toàn để tránh việc sử dụng vì bạn không làm gì có thể ném một ngoại lệ giữa việc tạo ra nó và xử lý nó.

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