Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: iks от Февраль 07, 2011, 20:14



Название: Поис строки в файле
Отправлено: iks от Февраль 07, 2011, 20:14
Усть вот такой код
Код:
QString patchPacet = strPachProg+"/"+strNamePacet;
QFile *file = new QFile(QDir::homePath()+"/xxx.log");
file->open(QIODevice::WriteOnly | QIODevice::ReadOnly | QIODevice::Append);
QTextStream streamFile(file);
bool prov = true;
while(!streamFile.atEnd())
{
     if(streamFile.readLine() == patchPacet)
     {
         prov = false;
     }
}
if(prov==true) {
    streamFile << patchPacet << "\n";
}
file->close();
Смотрю и не могу понять почему дописывается строка если она уже есть в файле, вроде не должна, может кто подскажет, как проверить наличие строки по другому, так что-то не хочет проверять


Название: Re: Поис строки в файле
Отправлено: Пантер от Февраль 07, 2011, 20:49
Код
C++ (Qt)
QString patchPacet = strPachProg+"/"+strNamePacet;
QFile file (QDir::homePath()+"/xxx.log");
file.open(QIODevice::ReadWrite | QIODevice::Append);
file.seek (0);
QTextStream streamFile(&file);
bool prov = true;
while(!streamFile.atEnd())
{
    if(streamFile.readLine() == patchPacet)
    {
        prov = false;
    }
}
if(prov) {
   streamFile << patchPacet << endl;
}
 
Вот так должно заработать. Append перемещает указатель в конец файла, поэтому нужно сделать seek в начало.


Название: Re: Поис строки в файле
Отправлено: iks от Февраль 07, 2011, 21:37
Спасибо все заработало, еще вот такая запись
Код:
QFile *file = new QFile(QDir::homePath()+"/xxx.log");
как-то тоже мозги похоже крутит
на будущее перейду на такое
Код:
QFile file(QDir::homePath()+"/xxx.log");


Название: Re: Поис строки в файле
Отправлено: Etud от Февраль 07, 2011, 22:48
еще вот такая запись
Код:
QFile *file = new QFile(QDir::homePath()+"/xxx.log");
как-то тоже мозги похоже крутит

А куда крутит ?

Не забудь объект удалить.


Название: Re: Поис строки в файле
Отправлено: iks от Февраль 07, 2011, 23:32
Да попробовал сходу не иеня скрипт применить на такое
Код:
QString patchPacet = strPachProg+"/"+strNamePacet;
QFile *file = new QFile(QDir::homePath()+"/xxx.log");
file->open(QIODevice::ReadWrite | QIODevice::Append);
file->seek (0);
QTextStream streamFile(file);
bool prov = true;
while(!streamFile.atEnd())
{
     if(streamFile.readLine() == patchPacet)
     {
         prov = false;
     }
}
if(prov) {
    streamFile << patchPacet << endl;
}
file->close();
Все равно писалась строка пока полностью не заменил на
Код:
QString patchPacet = strPachProg+"/"+strNamePacet;
QFile file (QDir::homePath()+"/xxx.log");
file.open(QIODevice::ReadWrite | QIODevice::Append);
file.seek (0);
QTextStream streamFile(&file);
bool prov = true;
while(!streamFile.atEnd())
{
     if(streamFile.readLine() == patchPacet)
     {
         prov = false;
     }
}
if(prov) {
    streamFile << patchPacet << endl;
}
Может у меня что криво стоит, но вроде до этого не сталкивался с такими проблемами, на пустом месте =)
Прикол ради спортивного интереса сейчас поменял скрипт, на выше написаный в этом топе, все нормально пошло ))))