c++ - 使用Qt替换C++文件中的文本

标签 c++ qt io

我正在使用 Qt 库,我正在尝试更改文件的内容。我想用 fname 替换存储在 tok2 中的文本。 更新代码:

QFile file(destPath);
if (file.open(QIODevice::ReadWrite | QIODevice::Text))
{
  QTextStream stream(&file);
  while (!stream.atEnd())
  {
    QString line = stream.readLine();
    QStringList tokenList = line.split("\t");        
    if ( tokenList.count() == 2 && (tokenList.at(0).endsWith("FILE",Qt::CaseInsensitive)))
    {   
      QString tok1 = tokenList.at(0).trimmed();    
      QString tok2 = tokenList.at(1).trimmed();
      QFileInfo relPath(tok2);
      QString fname = relPath.fileName();

        QString newLine = tok1.append(" ").append(fname);
        QString oldLine = tok1.append(" ").append(tok2);
        qDebug() << "Original line: " << oldLine << "New line" << newLine;
        QTextStream in(&file);

        while (!in.atEnd())
        {
          QString line = in.readLine();
          QString outline = line.replace(QString(oldLine), QString(newLine));
          in << outline;
        }
      }
    }                       
  }
}

tok2 的原始内容格式为 ../something/filename.ext,我必须用 filename.ext 替换它,但上面的代码没有用 fname 替换 tok2 的内容,简而言之,我无法写成这个文件。

最佳答案

你把事情搞得太复杂了。

const QString doStuff(const QString &str)
{
    // Change string however you want
}

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

    const QString filePath = "/home/user/test.txt";
    QTextCodec *codec = QTextCodec::codecForLocale();

    // Read file
    QFile file(filePath);
    if (!file.open(QFile::ReadOnly)) {
        qDebug() << "Error opening for read: " << file.errorString();
        return -1;
    }
    QString text = codec->toUnicode(file.readAll());
    file.close();

    text = doStuff(text);

    // Write file
    if (!file.open(QFile::WriteOnly)) {
        qDebug() << "Error opening for write: " << file.errorString();
        return -2;
    }
    file.write(codec->fromUnicode(text));
    file.close();

    return 0;
}

工作速度足够快,如果您的文件大小小于您的 RAM 量。

关于c++ - 使用Qt替换C++文件中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31069368/

相关文章:

vba - 错误 506 : Class not defined: 'FileSystemObject'

c++ - 如何阻止内存泄漏?

c++ - Vulkan UBO 传递错误

c++ - 获取字符串中的第 i 个字符时遇到问题

QMainWindow 上的 Qt 布局

qt - 如何在QML中渲染三次贝塞尔曲线?

c++ - 从线程中分离对象

添加到 std::map 的 C++ 宏

java - 文本文件读取

java - file.mkdirs() 不起作用