2015-06-26 6 views
0

Я использую библиотеку Qt, и я пытаюсь изменить содержимое файла. Я хочу заменить текст, хранящийся в tok2, на fname. Обновленный код:Замена текста в файле на C++ с использованием Qt

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 но выше код не заменяет содержимое tok2 по имя_файлу, в short Я не могу писать в этом файле.

+0

И ваш вопрос? – TheDarkKnight

+0

Содержимое fname не копируется в файл. – wazza

+1

Где вы пишете обратно в файл? – Vikram

ответ

0

Мое решение, которое работало отлично для меня:

// Open file to copy contents 
QFile file(srcPath); 
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) 
{ 
    // Open new file to write 
    QFile temp(destPath); 
    if (temp.open(QIODevice::ReadWrite | QIODevice::Text)) 
    { 
      QTextStream stream(&file); 
      QTextStream out(&temp); 
      while (!stream.atEnd()) 
      { 
       QString newLine; 
       //do stuff 
       out << newLine << "\n"; 
      } 
     temp.close(); 
    } 
    file.close(); 
} 
3

Вы делаете вещи слишком сложными.

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; 
} 

Работает достаточно быстро, если размер вашего файла меньше объема вашей ОЗУ.

Смежные вопросы