本以为 对c++够熟悉了,但是还是不行,今天遇到的一个问题,让我搞了十几分钟
- #include <iostream>
-
#include <sstream>
-
#include <fstream>
-
-
using namespace std;
-
-
int main()
-
{
-
// ofstream out("test.txt", ios_base::trunc | ios_base::out | ios_base::app);
-
ofstream out("test.txt", ios_base::trunc | ios_base::out );
-
string str("nihao");
-
stringstream ss;
-
ss << str;
-
ss << "1213213213213\n";
-
ss << "this is ss\n";
-
out << ss.str();
-
}
如果用注释的那一行,而不是用注释下面那一行的话,你是永远也看不到'test.txt'的
在 cplusplus reference 上看到的是
app (
append) Set the stream's position indicator to the end of the stream before each output operation.
trunc (
truncate) Any current content is discarded, assuming a length of zero on opening.
然后我天真的认为 trunc 用于文件打开的时候,app用于
打开后的流操作的模式
这样 就可以在有旧文件的情况下,删除旧文件的内容,添加新内容
但是结果却不是这样的
trunc | app 导致的结果是没有任何输出
其实我想要的需求 只要 一个 trunc就可以了
但是我不知道 为什么加了 app会什么都没有, 有知道的朋友 给我说一声
另外还发现一个很有意思的东西
- 1. stringstream ss;
-
2. cve_b_id.append("/cve_b_file.txt");
-
3. ofstream of( cve_b_id.c_str(), ios_base::out | ios_base::trunc ); 4.
-
-
5. for(temp_node = list_head_p->next; temp_node != NULL; temp_node = temp_node->next)
-
6. {
-
7. ss << "[";
-
8. ss << temp_node->file_name;
-
9. ss << "]\n";
-
10. ss << "cve_id:\n";
-
11. ss << temp_node->this_plugin_info.script_cve_id;
-
12. ss << "\n";
-
13. ss << "b_id:\n";
-
14. ss << temp_node->this_plugin_info.script_bugtraq_id;
-
15. ss << "\n";
-
16. of << ss.str();
-
17. cout << ss.str();
-
18. }
-
19. ss.str("");
-
20. of.close();
如果将 第19行的内容加到 17行下面的话,你的文件中只有最有一个节点的信息
至于为诶什么 会这样, 我还没找到答案
阅读(766) | 评论(0) | 转发(0) |