修改并附加文件中的额外行

Modify and append extra lines in a file

本文关键字:文件 修改      更新时间:2024-09-26

打开一个文件并在Qt中修改它有点困难。我有一个文件,里面有一些内容。现在我想打开它,再添加几行。

例如,在这里我打开文件

void MainWindow::on_pushButton_readlog_clicked()
{
QString filename = "logfilename.txt";
QFile originalFile(filename);
if(!originalFile.open(QIODevice:: QIODevice::ReadWrite))
{
qDebug () << "Error opening Log file: "<<originalFile.errorString();
return;
}
else
{
QTextStream instream(& originalFile);
QString line = instream.readLine();
while(!instream.atEnd())
{
QString line =instream.readLine(); // I can read line by line
qDebug()<<line;
}
originalFile.close();
}
}

基本上,在这里我想保留文件的所有内容,但添加两个​前两行的额外文本:第1行:";名称:ODL12";第2行:";设备ID:45R";

看起来我需要"附加";但不知道如何在Qt 中做到这一点

创建一个新文件并将内容复制(写入(到原始文件+mods,删除新文件或旧文件并重命名新文件。

https://www.cplusplus.com/reference/fstream/ofstream/

https://www.codevscolor.com/c-plus-plus-delete-a-file

https://cplusplus.com/reference/cstdio/rename/

也许这对你有用。。。更容易。

#include <fstream>
#include <sstream>
#include <vector>
#include <string>
#include <iostream>
#include <ctime>
using namespace std;
typedef std::vector<string> Vector;
void readReadFile(string &fileName, Vector &array){
std::ifstream file(fileName);
if(file.fail()){
//File does not exist code here
std::cout << "File doesn't exist." << endl;
return;
}
else{
std::string str;
while (std::getline(file, str)) {
array.push_back(str);
}
file.close();
}
}
void appendstuff(string text, Vector &array){
array.push_back(text);
}
void writebacktofile(string &fileName, Vector &array){
// https://stackoverflow.com/questions/17032970/clear-data-inside-text-file-in-c
std::ofstream myfile;
myfile.open(fileName, std::ofstream::out | std::ofstream::trunc);
//myfile.close();
// write vector back to file
//ofstream myfile;
//myfile.open (fileName);
for(auto& k : array)
myfile << k << "n";
myfile.close();
array.clear();
}
int main(){
std::clock_t start;
double duration;
start = std::clock();
Vector temporary;
string fileName = "input.txt";
readReadFile(fileName, temporary);
appendstuff("hello", temporary);
appendstuff("howdy", temporary);
writebacktofile(fileName, temporary);
duration = ( std::clock() - start ) / (double) CLOCKS_PER_SEC;
std::cout<<"printf: "<< duration << " seconds" << 'n';
return 0;
}

执行时间:0.000295秒