Tôi cố gắng để đọc từ một tập tin mà đang phát triển (một cái gì đó tương tự như những gì tail -F
làm), nhưng phải có một số vấn đề với mã của tôi:Cách đọc tệp văn bản đang phát triển trong C++?
string log, logFile("test.log");
size_t p = 0;
while(true)
{
ifstream ifs(logFile.c_str());
ifs.seekg(p); //*1
while(ifs.eof() == false)
{
getline(ifs, log);
cout << log << endl;
p = ifs.tellg(); //*2
}
nanosleep(&pause, NULL);
}
Nếu không có dòng // * 1 và // * 2, tệp nhật ký được đọc chính xác đến cuối của nó, nhưng nếu dòng mới được thêm vào không có gì xảy ra.
Với seekg và tellg tôi đang cố gắng lưu trữ vị trí kết thúc hiện tại của tệp, để khi tôi mở lại, tôi có thể đi tới đó và đọc những gì đã được thêm vào.
Tôi muốn biết điều gì sai trong mã của mình và nếu thực sự cần thiết phải đóng và mở lại cùng một tệp cho mục đích này.
Cảm ơn bạn.
Bây giờ nó đang hoạt động đúng cách. Cảm ơn bạn. – Pietro
Tôi nhận thấy rằng nếu tôi tạo đối tượng ifstream vào vòng lặp nó hoạt động, nhưng nếu tôi tạo nó bên ngoài nó thì không. Có cần phải đóng và mở lại một tệp để đọc những gì đã được thêm vào nó không? – Pietro
@Pietro, bạn cần xóa trạng thái eof của 'ifstream' bằng cách gọi' ifs.clear() 'trước lần thử đọc tiếp theo. Tôi _think_ 'tellg()' và 'seekg()' sẽ không cần thiết với cách tiếp cận này. – hmjd