11
A
回答
5
不,它不是。之前這已經被多次詢問過了。如果你想這樣做,你必須創建一個新文件,寫入「前置」數據,然後打開現有文件並將其內容複製到新文件中。
16
否 - 語言(或圖書館)在這裏並沒有太大的區別。大多數文件系統都不允許,完全停止。
獲得相同效果的常用方法是將新數據寫入新文件,然後將舊文件中的數據複製到新文件中,以遵循所寫的數據。
1
新的iostream
類可以包裝該功能。這假定您的預先數據不會太大,以致無法舒適地適應內存。像經常使用它ofstream
。
#include <fstream>
#include <sstream>
#include <vector>
class prepend_ofstream
: public std::ostringstream {
std::filebuf file;
public:
prepend_ofstream() {}
prepend_ofstream(char const *name, openmode mode = out) {
open(name, mode);
}
~prepend_ofstream() {
if (is_open()) close();
}
void open(char const *name, openmode mode) {
if (! file.open(name, mode & binary | in | out)) {
setstate(failbit);
}
}
bool is_open() { return file.is_open(); }
void close() {
if (! is_open()) {
setstate(failbit);
return;
}
char *strbuf = &str()[0];
std::vector<char> buf(str().size());
int rdsz;
do {
rdsz = file.sgetn(&buf[0], buf.size());
file.pubseekoff(-rdsz, cur);
file.sputn(strbuf, buf.size());
file.pubseekoff(0, cur); // "update the output sequence"
std::copy(&buf[0], &buf[0]+rdsz, strbuf);
} while (rdsz == buf.size());
file.sputn(&buf[0], rdsz);
if (! file.close()) {
setstate(failbit);
}
}
};
通常功能是通過新的流加到緩衝器類,而不是實際的流,但在這種情況下,新的功能是在close
,這是不幸的是沒有虛擬的。
相關問題
- 1. C#改寫/保存當前的文件
- 2. 寫文件到桌面
- 3. 前面加上的NodeJS到文件
- 4. C++寫文件
- 5. C#的StreamWriter寫在當前的文本文件
- 6. C寫的UINT16到文件有錯誤
- 7. C#向前界面事件
- 8. C寫()不寫入文件
- 9. 寫入當前文件
- 10. 寫入文件前綴
- 11. PHP:寫入當前文件
- 12. 液體XML在文件的前面寫入奇數字我的xml文件
- 13. C++:寫入文件
- 14. 寫入文件C++
- 15. C#編寫文件
- 16. C++重寫文件
- 17. 寫入文件 - C#
- 18. C++寫入文件
- 19. 寫C頭文件
- 20. 寫入C文件
- 21. 寫入文件c
- 22. ItextSharp MVC5 C# - 現有PDF文件前面的文本
- 23. 寫入到目標C文件
- 24. 如何寫C#查詢到JSON文件
- 25. C#寫入一個「到一個文件
- 26. C++:字符串寫入到文件
- 27. 回到線寫在文件C語言
- 28. 在桌面上書寫文本文件到文件夾
- 29. 用C++編寫的文件
- 30. 寫長文字文件流到文本文件QT C++
你怎麼能說這是不可能的,然後描述如何做到這一點?加速提供便攜式文件系統庫http://www.boost.org/doc/libs/1_42_0/libs/filesystem/doc/index.htm用'的boost :: remove'這的確實際上有所作爲,如果要取消舊文件並創建一個新文件 - 並非如此,或者甚至是一種實現它的好方法。 OP沒有要求一個班輪,他尋求幫助。 – Potatoswatter 2010-04-02 01:27:15
他沒有描述如何去做;他描述了這個問題的標準解決方法。 – Nate 2010-04-02 05:05:07
呃,作爲一種解決方法意味着完成任務。更重要的是,我們使用C++是因爲它是可移植的,而語言和庫*會做出改變,因爲使用了特定的特性來解決問題。看到我的答案。 – Potatoswatter 2010-04-02 13:27:56