找回密码
 立即注册
收起左侧

文本流操作问题

9
回复
7062
查看
[复制链接]
累计签到:5 天
连续签到:1 天
来源: 2015-8-31 19:19:49 显示全部楼层 |阅读模式
1Qter豆
#include <QCoreApplication>
#include<QFile>
#include<QDebug>
void haha()
{
    QFile file("file.txt");
    file.open(QIODevice::ReadWrite);
    QTextStream out(&file);
    out.seek(file.size());
    out<<"hehe";
    qDebug()<<out.pos();//此处输出0
    QString str;
    out>>str;
    qDebug()<<out.pos();//此处输出0
    qDebug()<<str;//此处输出空字符串
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    haha();
    return a.exec();
}
代码如上,为什么此处str会是空字符串呢,还有qdatastream如何随意移动流的读写位置呢?

最佳答案

查看完整内容

哦,你说的是这个啊!file.close是必须的,,因为close也有刷新缓冲区的作用...你写完了,,,要刷下缓冲区,然后把数据送进去...我以前也遇到过这个问题,,,之前在函数里那么写,,不用close具体愿意我也没真正查过,,我觉得应该是函数结束某个地方自己刷新了缓冲吧! 不过不论在什么情况下都建议去调用下close(),,,真的,以前写程序我也不注意,,现在做项目了,深有体会,像这样 "打开关闭"成对出现的好习惯还是很重要的,能避免犯很多错误 ...
回复

使用道具 举报

累计签到:615 天
连续签到:1 天
2015-8-31 19:19:50 显示全部楼层
哦,你说的是这个啊!file.close是必须的,,因为close也有刷新缓冲区的作用...你写完了,,,要刷下缓冲区,然后把数据送进去...我以前也遇到过这个问题,,,之前在函数里那么写,,不用close具体愿意我也没真正查过,,我觉得应该是函数结束某个地方自己刷新了缓冲吧! 不过不论在什么情况下都建议去调用下close(),,,真的,以前写程序我也不注意,,现在做项目了,深有体会,像这样 "打开关闭"成对出现的好习惯还是很重要的,能避免犯很多错误
回复

使用道具 举报

累计签到:615 天
连续签到:1 天
2015-8-31 22:47:36 显示全部楼层
第一:你你把"hehe"放到一个QString变量里,就可以写进txt里面了!
第二:因为你这样根本就没把数据写进txt,,所以pos返回的是0,你用上面的方法试试  pos应该就不会返回0了
第三:随意移动读写位置就是seek(),,你这个不行,,还是因为第一次根本就没写进去数据

点评

不好意思,,有个地方说的不太对,,刚才不放心,去试试了是,,pos返回的不是你写完数据的位置(其实就文件末尾),从实际效果来看,它返回的是,写第一个字符的位置(从数值上看,就是file,size)!  详情 回复 发表于 2015-8-31 22:54
回复

使用道具 举报

累计签到:615 天
连续签到:1 天
2015-8-31 22:54:03 显示全部楼层
qq1043068972 发表于 2015-8-31 22:47
第一:你你把"hehe"放到一个QString变量里,就可以写进txt里面了!
第二:因为你这样根本就没把数据写进txt,,所 ...

不好意思,,有个地方说的不太对,,刚才不放心,去试试了是,,pos返回的不是你写完数据的位置(其实就文件末尾),从实际效果来看,它返回的是,写第一个字符的位置(从数值上看,就是file,size)!
回复

使用道具 举报

累计签到:5 天
连续签到:1 天
2015-9-1 09:19:33 显示全部楼层
qq1043068972 发表于 2015-8-31 22:54
不好意思,,有个地方说的不太对,,刚才不放心,去试试了是,,pos返回的不是你写完数据的位置(其实就文件末尾) ...

额,我用QString()去括“hehe”后也没写进去文件,你可以把你的正确测试代码发下?

点评

我的意思是 QString str="hehe"; out  详情 回复 发表于 2015-9-1 09:35
回复

使用道具 举报

累计签到:615 天
连续签到:1 天
2015-9-1 09:35:19 显示全部楼层
llccyy02 发表于 2015-9-1 09:19
额,我用QString()去括“hehe”后也没写进去文件,你可以把你的正确测试代码发下? ...

我的意思是 QString str="hehe";    out <<str;
回复

使用道具 举报

累计签到:5 天
连续签到:1 天
2015-9-1 11:30:54 显示全部楼层
qq1043068972 发表于 2015-9-1 09:35
我的意思是 QString str="hehe";    out

#include <QCoreApplication>
#include<QFile>
#include<QDebug>
void haha()
{
     QFile file("file.txt");
     file.open(QIODevice::ReadWrite);
     QTextStream out(&file);
     QString str="123";
     out<<str;
}

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

     //haha();如果之调用haha()函数就可以写入文件

     /*file.open(QIODevice::ReadWrite);
     QTextStream out(&file);
     QString str="123";
     out<<str;*///这种写法写不进去
     return a.exec();
}

点评

你这样当然写不进去,,,你在main函数里没有先创建QFile对象啊!你在haha()函数里创建的QFile只在haha函数里起作用,haha函数执行完就被释放掉了  详情 回复 发表于 2015-9-1 12:22
回复

使用道具 举报

累计签到:615 天
连续签到:1 天
2015-9-1 12:22:29 显示全部楼层
llccyy02 发表于 2015-9-1 11:30
#include
#include
#include

你这样当然写不进去,,,你在main函数里没有先创建QFile对象啊!你在haha()函数里创建的QFile只在haha函数里起作用,haha函数执行完就被释放掉了
回复

使用道具 举报

累计签到:5 天
连续签到:1 天
2015-9-1 19:58:30 显示全部楼层
qq1043068972 发表于 2015-9-1 12:22
你这样当然写不进去,,,你在main函数里没有先创建QFile对象啊!你在haha()函数里创建的QFile只在haha函数里 ...

粘贴复制时候漏下,可是补上去也是没有用的,你试试,然后就是如果调用了file.close()就不管怎样都可以写入文件呢
回复

使用道具 举报

累计签到:5 天
连续签到:1 天
2015-9-2 14:13:06 显示全部楼层
qq1043068972 发表于 2015-9-1 22:15
哦,你说的是这个啊!file.close是必须的,,因为close也有刷新缓冲区的作用...你写完了,,,要刷下缓冲区,然后把 ...

好像暂时也只能这样了呢,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了