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

使用QFile读写文件,关于QByteArray的疑问

2
回复
7462
查看
[复制链接]

尚未签到

来源: 2021-7-30 17:26:15 显示全部楼层 |阅读模式
1Qter豆
我在写一个项目,可以认为是一个播放器,大致流程是这样的:主线程读取一个文件,根据读取的信息在界面上显示相关信息,点击播放的时候,使用movetothread的方法创建一个线程读取该文件,根据读取的信息播放。两个线程都使用以下方式读取文件:
  1. <span style="color: rgb(128, 0, 128);">       QFile</span><span style="color: rgb(192, 192, 192);"> </span><span style="color: rgb(9, 46, 100);">stuFile</span>(<span style="color: rgb(9, 46, 100);">strFilePath</span>);<pre><span style=" color:#c0c0c0;">    </span><span style=" color:#092e64;">stuFile</span>.<span style=" font-style:italic; color:#00677c;">open</span>(<span style=" color:#800080;">QIODevice</span>::<span style=" color:#800080;">ReadOnly</span>);</pre><pre>    <span microsoft="" yahei",="" simsun;="" color:="" rgb(128,="" 128,="" 0);"="">auto</span><span microsoft="" yahei",="" simsun;="" color:="" rgb(192,="" 192,="" 192);"=""> </span><span microsoft="" yahei",="" simsun;="" color:="" rgb(9,="" 46,="" 100);"="">arrFileData</span><span microsoft="" yahei",="" simsun;="" color:="" rgb(192,="" 192,="" 192);"=""> </span><span microsoft="" yahei",="" simsun;"="">=</span><span microsoft="" yahei",="" simsun;="" color:="" rgb(192,="" 192,="" 192);"=""> </span><span microsoft="" yahei",="" simsun;="" color:="" rgb(9,="" 46,="" 100);"="">stuFile</span><span microsoft="" yahei",="" simsun;"="">.</span><span microsoft="" yahei",="" simsun;="" color:="" rgb(0,="" 103,="" 124);"="">readAll</span><span microsoft="" yahei",="" simsun;"="">();</span></pre>
  2. <pre><span style=" color:#c0c0c0;">    </span><span style=" color:#808000;">const</span><span style=" color:#c0c0c0;"> </span><span style=" color:#808000;">char</span>*<span style=" color:#c0c0c0;"> </span><span style=" color:#092e64;">pFileData</span><span style=" color:#c0c0c0;"> </span>=<span style=" color:#c0c0c0;"> </span><span style=" color:#092e64;">arrFileData</span>.<span style=" color:#00677c;">data</span>();</pre>
  3. <pre><span style=" color:#c0c0c0;">    </span><span style=" color:#092e64;">stuFile</span>.<span style=" font-style:italic; color:#00677c;">close</span>();</pre>
复制代码
当我播放线程在播放该文件时,主线程再次读取该文件时程序必定会崩溃,崩溃的定位都一样的,崩溃的语句是 QByteArray t = qtFile.readAll(); 这是为什么呢?从上面的代码可以看到我读取完文件的所有数据后,该文件就被我关闭了。同时如果我把程序中关于文件的读写部分改成使用c语言的fopen读写文件,则程序不用有任何问题

回复

使用道具 举报

尚未签到

2021-7-30 17:29:08 显示全部楼层
C:\Users\ABC\Desktop\Snipaste_2021-07-30_17-28-24.png
回复

使用道具 举报

尚未签到

2021-7-30 17:30:29 显示全部楼层
QFile stuFile(strFilePath);
stuFile.open(QIODevice::ReadOnly);
auto arrFileData = stuFile.readAll();
const char* pFileData = arrFileData.data();
stuFile.close();
回复

使用道具 举报

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

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