我想从文件中写入/读取数据。是否可以在多个字符串/节中划分文件(在代码内)?或读取数据直到特定行?
就像:"读取数据直到第32行,将其放在一个字符串中,读取接下来的32行并将其放入另一个字符串"
我已经知道如何使用seekp读取和查找数据但我真的不喜欢它,因为我的代码总是很长。
我已经找到了一些代码,但我不明白它是如何工作的:
dataset_t* DDS::readFile(std::string filename)
{
dataset_t* dataset = NULL;
std::stringstream ss;
std::ifstream fs;
uint8_t tmp_c;
try
{
fs.open(filename.c_str(), std::ifstream::in);
if (!fs)
{
std::cout << "File not found: " << filename << std::endl;
return NULL;
}
while(fs.good())
{
fs.read((char*)&tmp_c, 1);
if (fs.good()) ss.write((char*)&tmp_c, 1);
}
fs.close();
dataset = new dataset_t();
const uint32_t bufferSize = 32;
char* buffer = new char[bufferSize];
uint32_t count = 1;
while(ss.good())
{
ss.getline(buffer, bufferSize);
dataitem_t dataitem;
dataitem.identifier = buffer;
dataitem.count = count;
dataset->push_back(dataitem);
count++;
}
return dataset;
}
catch(std::exception e)
{
cdelete(dataset);
return NULL;
}
}
代码编辑二进制保存文件。
或者有人可以链接我一个我可以了解缓冲区和字符串流的网站吗?
答案 0 :(得分:0)
您可以创建一些类来模拟您的需求:delete
用于“抓取32行”,而take<N>
用于迭代行。
您的lines_from
课程会接受任何lines_from
:编码的内容,压缩的内容,......只要它能为您提供一系列字符。 std::istream
会将其转换为take<N>
块。
这是一个说明它的片段:
array<string, N>
以下是支持类和功能:
int main(){
auto lines = lines_from{std::cin};
while(lines.good()){
auto chunk = take<3>(lines);
std::cout << chunk[0][0] << chunk[1][0] << chunk[2][0] << std::endl;
}
}
(cpp.sh上的演示)