Вот более надежный метод, если исходить из ответа Алекса З:
#include <fstream>
#include <string>
#include <sstream>
int main(){
std::ifstream fileIn( "file.txt" ); // Open for reading
std::stringstream buffer; // Store contents in a std::string
buffer << fileIn.rdbuf();
std::string contents = buffer.str();
fileIn.close();
contents.pop_back(); // Remove last character
std::ofstream fileOut( "file.txt" , std::ios::trunc); // Open for writing (while also clearing file)
fileOut << contents; // Output contents with removed character
fileOut.close();
}
Хитрость заключается в том, что эти строки позволяют эффективно считывать весь файл в строку, а не просто токен:
std::stringstream buffer;
buffer << fileIn.rdbuf();
std::string contents = buffer.str();
Это вдохновлено первым решением Джерри Коффина в этом посте . Там должно быть самое быстрое решение.