qt seek函数 疑问?

花果山猴哥 2016-05-25 07:56:35
求教:

新建一个文件后(初始文件大小为0字节)
char a = 5;
seek(100);
file.write(&a,1);

在windows下 文件大小为101字节


为什么这么简单的逻辑跑到Ubuntu 下编译 运行后 文件大小是1个字节呢,
也就是
seek(100);
没起作用?
...全文
748 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
花果山猴哥 2016-06-12
  • 打赏
  • 举报
回复
问题解决了 ubuntu下文件用 读写模式打开就可以了
花果山猴哥 2016-06-07
  • 打赏
  • 举报
回复
上面是2个按钮 一个新建文件 一个修改内容
花果山猴哥 2016-06-07
  • 打赏
  • 举报
回复
//不好意思出差了,好几天没开电脑 现在问题有变化了 比如我先这么操作 //--新建一个文件 写入64个字节 QString savePath = "debug_file.bat"; QFile dfile(savePath); bool open_ok = dfile.open(QIODevice::WriteOnly | QIODevice::Append); qDebug() << "open_ok : " << open_ok; char tb[64] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; dfile.write(tb,64); qDebug() << "dfile.size() :" << dfile.size(); dfile.close(); ///----------------------------------------------------------------------------------- 然后马上对这个文件进行操作 QString savePath = "debug_file.bat"; QFile dfile(savePath); bool open_ok = dfile.open(QIODevice::WriteOnly | QIODevice::Append); qDebug() << "open_ok : " << open_ok; dfile.seek(5); char a = 100; dfile.write(&a,1); int tst = 0x11223344; dfile.seek(48); dfile.write((char*)&tst,4); qDebug() << "dfile.size() :" << dfile.size(); dfile.close(); //---------------------------- 文件大小变成69个字节了 HEX查看变成这样了 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,0...,0(第64个),0x64,0x44,0x33,0x22,0x11 查看help 是这么说的 QIODevice::Append 0x0004 The device is opened in append mode, so that all data is written to the end of the file. 也就是写入的文件添加到后面了 那没办法修改文件中的内容了? 我这操作问题在哪?求指教
Little柯南 2016-06-02
  • 打赏
  • 举报
回复
你在0~number上 执行qint64 QIODevice::write(const QByteArray & byteArray),也就是关联字节数组占位,你就默认使用0占位, 或者声明数组 char arr【number】={0},然后先将这个数组写进去,再seek(number)也就是当前位置开始执行。如果前面的0什么的要更换,你就把他作为QString使用replace函数操作。不做替换,那么一直保持0占位不变
Little柯南 2016-06-02
  • 打赏
  • 举报
回复
另外,建议:如果对某个人发表的建议看法有问题,请点击这段话下面的引用,然后进行回复。不然对方并不一定知道你做出的应答
花果山猴哥 2016-05-29
  • 打赏
  • 举报
回复
多谢回复
有没有一些简单的办法使
linux 0~number这空位置像window一样默认化呢?
因为保存文件的时候 数据内容会保留一些多余的字节
Little柯南 2016-05-27
  • 打赏
  • 举报
回复
char*是指针,size是字节数,seek定位置 seek到指定位置,写入size数字节,因为你中间越过了seek(number)的number个字节数,由于系统的原因,windows默认size加上number个写入字节数,系统将0~number这期间的都默认化了; 但是linux将0~number这空位置默认为NULL,因为你根本没有数据写入; 不同平台,不同编译器会有一些差异。写代码你可以多次qDebug(),以得来与识别你要的东西,并加以区分。但在这些问题上我们知道就可以,过分追究的话,那就是底层系统原因了
花果山猴哥 2016-05-26
  • 打赏
  • 举报
回复
file.close(); 我在windows下运行后 文件大小为19个字节,查看文件也是正常的 怎么在ubuntu下 编译后运行文件大小为7个字节;seek(16);没起作用? 不晓得这么操作问题在哪,
花果山猴哥 2016-05-26
  • 打赏
  • 举报
回复
比如: 前16个字节(0-15) 存储qstring,当然qstring长度不超过16个字节,只会少于16字节; 然后16-31 字节存储 另一个qstring(长度也不超过16个字节,只会少于16字节) 我的操作流程: 新建一个文件(初始文件大小为0字节),并只写打开 qstring str = "01234"; file.write(str1,str1.ength());//这个地方要把qstring 转QByteArray file.seek(16); qstring str2 = "789"; file.write(str2,str2.ength());//这个地方要把qstring 转QByteArray
花果山猴哥 2016-05-26
  • 打赏
  • 举报
回复

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧