gpt4 book ai didi

c++ - 使用 Windows 行尾有效地将文件读取到 std::string

转载 作者:太空宇宙 更新时间:2023-11-04 13:13:46 25 4
gpt4 key购买 nike

在 C++ 中将文件读入字符串的一种更有效的方法如下:

fstream file(filePath);
file.seekg(0, std::ios_base::end);
string fileContents;
fileContents.resize(file.tellg());
file.seekg(0, std::ios_base::beg);
file.read(&fileContents[0], fileContents.size());

如果这是在 Windows 上,并且文件具有 Windows 样式的\r\n 行结尾,那么由于 tellg() 报告文件的大小,字符串的大小最终将大于其内​​容字节,而 file.read() 会将\r\n 转换为\n,从而生成比文件大小更小的字符串。

我可以想出几种方法来处理这个问题,但没有一种是有效的或优雅的。

所以我的第一个问题是:这实际上是一个问题还是我只是在使用这种技术的某个地方犯了一个愚蠢的错误?

我的第二个问题是:处理此问题的最有效和最优雅的方法是什么?

我目前处理这个问题的首选方法是即使在 Windows 上也使用 Unix 行结束样式编写我的文本文件,这是在第一个链接中提出的,作为使用 utf-8 的 C++ 编码策略的一部分Windows,第二个链接似乎暗示微软自己可能会转向。

http://utf8everywhere.org/

https://blogs.msdn.microsoft.com/vcblog/2016/02/22/new-options-for-managing-character-sets-in-the-microsoft-cc-compiler/

最佳答案

fileContents.resize(file.gcount())read() 之后应该可以解决问题。

关于c++ - 使用 Windows 行尾有效地将文件读取到 std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38482522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com