• 5854阅读
  • 3回复

对txt文件的修改操作遇到的问题 [复制链接]

上一主题 下一主题
离线jaylittle
 
只看楼主 倒序阅读 楼主  发表于: 2009-02-23
— 本帖被 XChinux 执行加亮操作(2009-02-24) —
现在我的文件当中是这样的:
127.0.0.1
127.0.0.1
127.0.0.1
127.0.0.1
我要把第二行改成192.168.88.56
我是这么做的:
        while (!in.atEnd())
    {
                QString userIn = in.readLine();
                if(userIn == ID)                 //满足某个条件就进入
        {
             qint64 insert =in.pos();
             in.seek(insert);                        //找到要插入的点
             out << “192.168.88.56” << "\n";          //写替换的内容
             qDebug() << insert << in.seek(insert);
                     break;
                }
                else ;
    }
可是输出变成了
127.0.0.1
127.0.0.1
192.168.88.56
0.0.1
可见,它改变的是第三行,而且还把第四行给改变了。应该怎么写才对阿!!!!
离线weizhy
只看该作者 1楼 发表于: 2009-02-24
使用这种方法的时候得保证替换掉的和待替换的字符长度是一致的
我没想出什么好的方法来,至少可以在定位以后将文件分为两个部分(记住位置)
然后新建一个临时文件,将三个部分按照新的顺序拷贝进去?
这样好像很不好,但至少可以实现
而且可以将多个更改合并执行
离线XChinux

只看该作者 2楼 发表于: 2009-02-24
对于文档内容比较少的文件读写,完全可以一次性全读出来,就楼主的例子来说,可以这样做:

QFile file("myfile.txt");
if (!file.open(QIODevice::Text | QIODevice::ReadOnly))
{
    return;
}
QString strInfo(file.readAll());
file.close();
QStringList slInfo = strInfo.split("\n");
if (slInfo.count() > 1)
{
      slInfo[1] = "192.168.88.56";
}
QFile::remove("myfile.txt");
if (!file.open(QIODevice::Text | QIODevice::WriteOnly))
{
    return;
}
file.write(slInfo.join("\n").toUtf8());
file.close();
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线jaylittle
只看该作者 3楼 发表于: 2009-02-24
引用第1楼weizhy于2009-02-24 07:19发表的  :
使用这种方法的时候得保证替换掉的和待替换的字符长度是一致的
我没想出什么好的方法来,至少可以在定位以后将文件分为两个部分(记住位置)
然后新建一个临时文件,将三个部分按照新的顺序拷贝进去?
这样好像很不好,但至少可以实现
而且可以将多个更改合并执行


我尝试在文件的每行后面都加上了一些空格键,新内容吞食下一行的问题倒是暂时解决了,不过要更改的行没有改变的问题还是没有解决!我知道是我的seek()找的位置不对,不过我也不知道怎么才能找到正确的位置啊!
哪位大哥能改一下我的代码?
快速回复
限100 字节
 
上一个 下一个