如何将任何文件安全地读取为字符串
How to read any file safely into a string?
可能的重复:
在c++中将文件拖入std::字符串的最佳方法是什么?
我正在尝试为C++模仿PHP的file_get_contents()函数。
然而,当我将char数组转换为字符串时,它停止在nullbyte:
fread(charbuf, 1, file_size, fp);
string str(charbuf);
如何将字符串初始化为静态大小的数组,并将文件内容直接读取到该容器?此外,我如何检查它的错误,例如,如果没有足够的内存来初始化该字符串。这也会让我摆脱目前正在使用的临时内存分配,我想摆脱它。
安全性如何?当我读取同一文件时,是否可能有多个进程同时读取同一个文件和/或其中一个进程同时写入该文件?我该如何避免这种事情的发生?
我希望你们能以其他方式回答"字符串不是二进制容器"。
我要求重新讨论这个问题,因为事实是:"显然,这个问题和以往一样重要:两年后,两种最有效的解决方案仍然会复制内存中的整个文件内容,而优化器无法消除这个副本。这是一种非常不令人满意的情况。–Konrad Rudolph 10月25日6:25"C++中的std::字符串?或者你想让我创建一个新的问题,要求在没有额外字符串副本的情况下读取文件?
std::ifstream fin("somefile.txt");
std::stringstream buffer;
buffer << fin.rdbuf();
std::string result = buffer.str();
这个片段将把你的所有文件放入std::string
我希望你能用其他方式回答"字符串不是二进制容器"。
std::string
是一个二进制容器,但您选择的构造函数将C样式字符串作为参数。尝试不同的构造函数:
std::fread(charbuf, 1, file_size, fp);
std::string str(charbuf, file_size);
编辑:考虑避免内存分配的要求:
std::string str(file_size, 0);
std::fread(&str[0], 1, file_size, fp);
相关文章:
- 如何使用Luacneneneba API正确读取字符串和表参数
- 如何从二进制文件中读取字符串
- 如何在 c++ 中使用 getline 从文件中读取字符串?
- 读取字符串文本输入以创建 2D 矢量
- 罗马数字到阿拉伯语 (vinculum) - 读取字符串中的字符
- C++:从文件中读取字符串和整数,并获得最大数字
- C++,从文件中读取字符串,分段错误
- 如果语句错误地读取字符串,则始终在第一个条件返回
- 如何从内存中读取字符串?
- 如何创建一个C++程序来读取字符串数组中的信息,然后将其排序到类中?
- 我需要C++读取字符串数组中每个单词的第一个字母
- 读取字符串C++的字符时出错
- 读取字符串直到标志 (C++)
- 读取字符串字符时出错 - 对于数组中的字符串值
- C++输入文件流无法从文件中读取字符串
- 读取字符串字符时出错
- 如何读取<字符串,矢量<对<int,字符串的映射>>>
- 如何使此函数使用 getline 读取字符串并使用 int 执行相同的行为?
- C++ 使用 Strtok 读取字符串字符时出错
- 使用 getline 读取字符串,但每行中都有换行符