2011-01-27 56 views
16

Tôi có một tệp với một số dữ liệu của người dùng1. Tôi muốn sử dụng cùng một tệp cho user2 bằng cách xóa nội dung của tệp.Làm cách nào để xóa toàn bộ nội dung của tệp trong C?

Ý tưởng của tôi là khi người dùng mới đến, dữ liệu của người dùng trước phải rõ ràng và cùng một tệp sẽ sẵn sàng cho người dùng mới.

Trả lời

31

Như @stefan nói sử dụng fopen() với chế độ "w" sẽ thực hiện công việc cho bạn. Khi bạn mở một tệp có cờ "w", nó sẽ tạo một tệp trống để ghi. Nếu một tệp có cùng tên đã tồn tại thì nội dung của nó sẽ bị xóa và tệp được coi là tệp trống mới.

Nếu tệp đã mở, bạn có thể sử dụng chức năng freopen() từ stdio.h với chế độ "w" vì trước tiên nó sẽ đóng tệp và sau đó mở lại để ghi xóa bất kỳ tệp nào trong tệp trước đó.

14

với fopen(filename, flag) chỉ cần mở nó với cờ = "w" hoặc "wb" và nó sẽ bị xóa

+0

thanx stefan, nhưng tôi muốn xóa FILE mạnh mẽ (rõ ràng) – mujahid

+1

thats những gì stefan nói. – Rozuur

+0

ok gys !! nhưng trong thời gian prog. exec. em mở/đóng (phụ thêm) nhiều lần. IWANT TO CLEAR FILE CHỈ KHI MỘT SỐ điều kiện xảy ra. – mujahid

3

Có hai cách:

1. fd=open(filename,O_RDONLY | O_WRONLY | O_TRUNC); 


2. [cat /dev/null > filename] for BASH. It can be directly used in c program using [system()] system call. 

    system("cat /dev/null > filename"); 
+0

FYI: hộp thứ hai là Bourne shell, chứ không phải C. – michaelb958

+0

Ngoài ra, thứ hai có thể được thay thế bằng một cuộc gọi duy nhất để 'cắt ngắn() ', thay thế con mèo vô dụng. – Hasturkun

+1

Từ 'man 2 open':' Không giống như các giá trị khác có thể được xác định trong cờ, các giá trị chế độ truy cập O_RDONLY, O_WRONLY và O_RDWR không chỉ định từng bit riêng lẻ. Thay vào đó, chúng xác định thứ tự thấp hai bit cờ, và được định nghĩa tương ứng là 0, 1 và 2. Nói cách khác, sự kết hợp O_RDONLY | O_WRONLY là một lỗi logic, và chắc chắn không có nghĩa giống như O_RDWR.' Vì vậy, bằng cách chỉ định 'O_RDONLY | O_WRONLY', bạn đang đặt thứ tự thấp 2 bit thành 3 thay vì 2. Việc sử dụng 3 bit được thực hiện xác định và thay đổi giữa các hệ thống. –

8
fclose(fopen("file.txt", "w")); 

Tại sao công trình này:

viết: Tạo một tập tin rỗng cho các hoạt động đầu ra. Nếu một tệp có cùng tên đã tồn tại, nội dung của nó bị hủy và tệp được coi là tệp trống mới.

(trích dẫn từ http://www.cplusplus.com/reference/cstdio/fopen/)

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