Есть программа, которая призвана находить в заданном файле числовое значение, и менять его на то, которое нужно мне. Но есть одно "но". С маленькими файлами работает отлично, но вот с файлом размером в 250,000 строк появляется проблема. Он просто напросто переписывает первые 141 строку и дальше просто ничего не делается. Что я делаю не так?
#include <QCoreApplication>
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <assert.h>
#include <memory>
#include <list>
#define FILE_PATH "C:\\client.dll"
#define STR_TO_FIND "1134"
#define STR_TO_REPLACE "1590"
bool replace(std::string& str, const std::string& from, const std::string& to) {
size_t start_pos = str.find(from);
if(start_pos == std::string::npos)
return false;
str.replace(start_pos, from.length(), to);
return true;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
std::fstream fs(FILE_PATH, std::ios::in | std::fstream::out);
assert(fs.is_open());
std::vector<std::string> lines;
std::string buffer;
while(getline(fs, buffer))
{
replace(buffer, STR_TO_FIND, STR_TO_REPLACE);
lines.push_back(buffer);
}
fs.close();
fs.open(FILE_PATH, std::ios::trunc | std::fstream::out);
assert(fs.is_open());
for(size_t i = 0; i < lines.size(); ++i)
{
fs << lines[i] << std::endl;
}
fs.close();
return a.exec();
}
Помогите, ребята.
Файл, если надо, залил сюда
rgho.st/6Sg6c4YCW
//Нашел закономерность, зависает он на каждом таком символе