我有一個函數,它是一個回調從它看起來像一個圖書館如下:如何從字符串流數據寫入一個文件(CPP)
void onCallBack(int date, const std::stringstream &data);
我想寫從data
變量接收到的數據一個物理文件,所以我這樣做:當過存在於數據的更新
void onCallBack(int date, const std::stringstream &data)
{
ofstream filePtr;
filePtr.open("data.file", ios::app);
string dataToWrite = data.str();
filePtr << dataToWrite.c_str();
filePtr.close();
}
回調onCallBack
函數被調用,我想這個更新的數據寫入到文件中。
問題是,數據是std::stringstream
類型,它像一個文件/緩衝器和從該緩衝區我只是想讀例如更新數據部分:
在第一回調data
包含字符串
this is first line
和第二回撥它包含:
this is first line
this is second line
在回調函數我寫的第一個電話字符串的文件,並在第二次回電我只是想寫this is second line
文件不再拳頭線。
我該如何提取std::stringstream
的更新部分。
const std::stringstream &data
變量是不變的,不能修改或我們不能使用tellg
或sync
。
更新/編輯:
1.抱歉c標籤。
2.對於使用read
,我們需要提供塊大小來讀取,我不知道塊的大小。
3.你可以提供一個使用ios_base :: xalloc,ios:base :: iword和ios_base :: pword來做這個的例子。
4.閱讀不是一個常量,但tellg是。
5.是的沒有人打電話data.str("")
,它是從lib的純虛函數,在我的代碼我沒有這樣做。
刪除了「C」的標籤,因爲這顯然不是C. – Flexo
爲什麼不使用'read',而不是'str',這,大概是從緩存中刪除讀取字符。 –
修正了標題中的語法錯誤。 – Rhexis