2010-01-16 34 views
14

Tôi đang cố gắng đọc dữ liệu từ một tệp văn bản, xóa nó, và sau đó viết vào nó, theo thứ tự đó bằng cách sử dụng lớp fstream.Đọc từ tập tin, xóa nó, ghi vào nó

Câu hỏi của tôi là cách xóa tệp sau khi đọc. Tôi biết rằng tôi có thể mở một tệp và xóa nó cùng lúc, nhưng có một số chức năng mà tôi có thể gọi trên luồng để xóa nội dung của nó không?

Trả lời

15

Bạn nên mở nó, thực hiện các thao tác nhập của bạn, sau đó đóng nó và mở lại nó với bộ cờ std :: fstream :: trunc.

#include <fstream> 

int main() 
{ 
    std::fstream f; 
    f.open("file", std::fstream::in); 

    // read data 

    f.close(); 
    f.open("file", std::fstream::out | std::fstream::trunc); 

    // write data 

    f.close(); 

    return 0; 
} 
4

Nếu bạn muốn hoàn toàn an toàn trong trường hợp xảy ra sự cố hoặc sự kiện tai hại khác, bạn nên ghi vào tệp tạm thời thứ hai. Sau khi hoàn tất, xóa tệp đầu tiên và đổi tên tệp tạm thời thành tệp đầu tiên. Xem thư viện Boost Filesystem để được trợ giúp thực hiện việc này.

+0

Làm như thế này, vẫn còn một khoảng cách giữa xóa và đổi tên. Trên hệ thống tập tin UNIX, bạn nên fsync, bỏ qua xóa, và chỉ cần đổi tên tập tin tạm thời trên tập tin đầu tiên; nó sẽ được thay thế bằng nguyên tử. Trên Windows, NTFS có chức năng ReplaceFile đặc biệt; thay thế nguyên tử không thể thực hiện được trên các hệ thống tập tin khác AFAIK. – ephemient

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