gpt4 book ai didi

c++ - 从二进制文件读取文本时避免\r\n

转载 作者:行者123 更新时间:2023-11-28 07:50:19 25 4
gpt4 key购买 nike

我有一个包含很多文件的二进制文件(类似于 .tar),我可以在其中找到二进制文件和文本文件。

在内存中处理字符串时,回车符通常是'\n',但是如果我从这个打包文件中读取文本部分,我会得到"\r\n" .因此处理此文本会给我错误。

这是从二进制文件中读取文本的代码:

FILE* _fileDescriptor;                        // it's always open to improve performance
fopen_s(&_fileDescriptor, _filePath.string().c_str(), "rb");

char* data = new char[size + 1]; // size is a known and correct value
fseek(_fileDescriptor, begin, SEEK_SET); // begin is another known value, where the file starts inside the packed one
fread(data, sizeof(char), size, _fileDescriptor);
data[it->second.size] = '\0';

这给了我正确的文本到数据,但是下面的代码在读取空行时给我错误:

istringstream ss(data);      // create a stringstream to process it in another function
delete[] data; // free the data buffer

// start processing the file
string line;
getline(infile, line); // read an empty line

if(line.size() > 0) {
/*
enters here, because the "empty" line was "\r\n", and now the value of line is '\r', therefore line.size() == 1
*/
...

那么,有什么建议可以避免 '\r' 吗?

我在 Notepad++ 上编辑了它。将其配置更改为使用 '\n' 而不是 '\r\n' 作为行车有效,但我不想依赖于此,因为其他人可能会错过它,如果发生这种情况。

最佳答案

可能最简单的方法是从字符串中删除 '\r' 字符,然后丢弃空行。请参阅此答案以了解修剪 std::string 的方法(我假设这就是“线”):

What's the best way to trim std::string?

关于c++ - 从二进制文件读取文本时避免\r\n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13943669/

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