Làm cách nào để xóa nội dung của tệp?


79

Tôi cần xóa nội dung của một tệp cụ thể mỗi khi ứng dụng khởi động. Tôi phải làm nó như thế nào?

Câu trả lời:


129

Bạn có thể sử dụng phương thức File.WriteAllText .

System.IO.File.WriteAllText(@"Path/foo.bar",string.Empty);

Tôi có một tệp được liên kết cứng và sử dụng File.WriteAllText, có vẻ như điều này đôi khi (?) Xóa tệp vì các liên kết cứng không được cập nhật.
Ciantic

Tôi khuyên bạn không nên làm điều đó nếu thao tác khác sẽ truy cập tệp ngay sau thao tác này. Tôi phải đối mặt với vấn đề mà các tập tin đã không nhận được khép kín ghi sau dòng mã này, và nguyên nhân IO exceptions of file is in use, vì vậy tôi khuyên bạn nên để xử lý nó bằng tay thông qua dòng tập tin
deadManN

81

Đây là những gì tôi đã làm để xóa nội dung của tệp mà không tạo tệp mới vì tôi không muốn tệp hiển thị thời gian tạo mới ngay cả khi ứng dụng vừa cập nhật nội dung của nó.

FileStream fileStream = File.Open(<path>, FileMode.Open);

/* 
 * Set the length of filestream to 0 and flush it to the physical file.
 *
 * Flushing the stream is important because this ensures that
 * the changes to the stream trickle down to the physical file.
 * 
 */
fileStream.SetLength(0);
fileStream.Close(); // This flushes the content, too.

Tôi đã sử dụng .NET 3.5, đề phòng bạn muốn biết phiên bản.
Abhay Jain

Olive, nếu nó trả lời câu hỏi của bạn, bạn vui lòng đánh dấu nó là một câu trả lời. Tuy nhiên, nếu giải pháp được đề xuất không hoạt động trong trường hợp của bạn, vui lòng cho chúng tôi biết ngay cả khi đó.
Abhay Jain

5
+1 Đây là cách duy nhất để đầu tiên có được khóa tệp, kiểm tra các thuộc tính tệp một cách an toàn và cuối cùng là xóa nội dung.
mafu

1
Đây chính xác là những gì bản thân tôi cần ... tôi cần có một dịch vụ giao tiếp với ứng dụng để gửi các tin nhắn từng dòng đơn giản cho người dùng và điều này cho phép tôi giữ khóa tệp của mình và xóa các tin nhắn để ngăn ứng dụng dịch vụ khỏi việc chèn và vô tình làm rơi thư hoặc trùng lặp thư.
phillk6751

2
Có nên tạo luồng lọc trong một khối sử dụng không? Điều đó cũng sẽ tự động đóng luồng.
Wuolennaj

11

Sử dụng FileMode.Truncatemọi lúc bạn tạo tệp. Cũng đặt File.Createbên trong a try catch.


2

Cách đơn giản nhất để làm điều này có lẽ là xóa tệp qua ứng dụng của bạn và tạo một tệp mới có cùng tên ... thậm chí còn đơn giản hơn chỉ cần làm cho ứng dụng của bạn ghi đè nó bằng một tệp mới.


1
Có thể xảy ra sự cố nếu bạn cố gắng tạo tệp ngay sau khi xóa. Đôi khi hệ điều hành không thể tạo tệp vì nó "nghĩ rằng" tệp vẫn tồn tại.
Dmitrii Lobanov

@Dmitry Lobanov - [Tôi biết đây là một chủ đề cũ]. Tôi không chấp nhận rằng hệ điều hành đôi khi cho rằng một tệp vẫn tồn tại, trừ khi có lý do chính đáng. Nó sẽ là một hệ điều hành rất kém nếu nó làm vậy. NHIỀU khả năng hơn là một cái gì đó vẫn có một xử lý đang mở trên tệp hiện có. Nó thậm chí có thể là phần mềm của riêng bạn nếu bạn không cẩn thận trong việc đóng các tệp (ví dụ bằng cách sử dụng 'using' để đảm bảo việc xử lý). Cũng có thể là phần mềm chống vi rút. Đồng ý với kết luận của bạn. Tôi nghĩ FileMode.Truncate là cách để đi.
Steve Kidd

2

Cách dễ nhất là:

File.WriteAllText(path, string.Empty)

Tuy nhiên, tôi khuyên bạn nên sử dụng FileStreamvì giải pháp đầu tiên có thể némUnauthorizedAccessException

using(FileStream fs = File.Open(path,FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
     lock(fs)
     {
          fs.SetLength(0);
     }
}

1

Hãy thử sử dụng một cái gì đó như

File.Create

Tạo hoặc ghi đè tệp trong đường dẫn được chỉ định.


Không phải là một ý kiến ​​hay cho câu hỏi được hỏi: Không xóa dữ liệu đã có trong tệp - nó chỉ ghi đè lên độ dài của dữ liệu mới, vì vậy nếu dữ liệu cũ> dữ liệu mới thì bạn sẽ kết hợp cả hai.
namford
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.