Hỏi về thêm dữ liệu vào file trong c++

a/c cho e gợi ý với ạ.
e đang học về file nhưng muốn ghi thêm 1 dòng sau một dòng bất kì của file txt thì nên làm thế nào ạ. e chỉ biết thêm vào cuối file thôi.
e cảm ơn nhiều. :clap:

1 Like

1/ Get index của char cuối của row bạn cần insert.
2/ Gọi hàm insert như khi insert cuối file nhưng chèn thêm index ở 1.

3 Likes

bạn có thể nói rõ hơn không ạ? mk chưa hiểu lắm.

Đọc ra hết > thay đổi theo ý bạn > ghi lại.

3 Likes

vâng, mình cảm ơn nhiều ạ!

nếu không phải ở cuối file thì bạn chỉ có thể ghi đè, nếu bạn xài c++ thì có thể xài seekp

2 Likes

bạn có thể nói rõ hơn đc ko ạ?

Mình nghĩ bạn nên đọc cả file lên chỉnh sửa rồi ghi lại sẽ tốt hơn.
Đây là code demo ghi đè, file in.txt có nội dung:
0123456789
Ghi bình thường:

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
fstream fout("in.txt");
if (!fout.is_open())
    return 1;

fout.seekp(5, ios_base::beg);
fout << "abcdefghiklm";

fout.close();
return 0;
}

Ghi nhị phân:

#include<iostream>
#include<fstream>
using namespace std;

int main()
{
    fstream fout("in.txt", ios::binary|ios::in|ios::out);
    if (!fout.is_open())
        return 1;

    fout.seekp(5, ios_base::beg);
    fout.write((char*)&"abcdefghiklm",12);

    fout.close();
    return 0;
} 

file in.txt sau khi ghi theo cả hai cách:
01234abcdefghiklm

2 Likes

Vấn đề là ntn: ở text mode sẽ có các phép chuyển đổi nên tellgseekg sẽ không ăn khớp nhau trên Windows. Đọc hết cho đỡ đau đầu :grimacing:

4 Likes

Đọc hết file và đếm \n =>> ra dòng cần thêm

2 Likes

mk chưa hiểu rõ về seekp nên mình đọc và ghi sang một file khác để sửa :joy:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?