如何读取qt中大于600mb的文件? 我想使用file.readAll()读取文件。它可以处理小文件。但它会在大文件中产生bad_alloc错误?我该怎么办?尝试读取qt中的大文件时发生bad_allock错误
回答
不要这样做。
很少有必要在一次操作中将大文件加载到内存中。
您无法为用户导航或操作加载这么多信息,因此,如果我怀疑您只是充当光盘上的文件和将文件发送到其他位置之间的中介,那么请使用一种机制将Qfile视为QIODevice,而不是将其完全加载为QString或QByteArray。
如果您(或您的客户)在Windows上使用32位系统,但可能拥有超过2Gb的RAM,则可能需要了解/LARGEADDRESSAWARE链接器选项,该选项可以支持您地址大于2Gb,如果你确实无法将文件加载到内存中,那么可能会也会改善您的情况。
嗨罗杰Attrill。其实我想读整个文件并上传到服务器。我试图开发上传器(客户端到服务器)。我考虑以块读取文件。但QNetworkAccessManager不提供分块传输。 – zi0408 2012-01-04 09:58:42
[QNetworkAccessManager :: post](http://developer.qt.nokia.com/doc/qt-4.8/qnetworkaccessmanager.html#post)除了QByteArray版本之外还有一个QIODevice选项 - 不会避免加载文件第一? – 2012-01-04 10:16:53
考虑以块为单位读取文件,而不是一次全部读取。当然,您的目标可能是在文本编辑器中显示整个文件,在这种情况下,部分加载会更复杂。你很模糊,所以很难更具体。
尝试增加
QMAKE_LFLAGS += -Wl,--large-address-aware
到你的Qt亲文件,从我的理解它会允许一个进程超过2GB积累更多的内存。
是的,但只在x64的Windows上。并假设使用MinGW。 – vsizikov 2013-02-02 21:39:14
- 1. 尝试读取大文件时发生System.OutOfMemory异常
- 2. 发生UPLOAD_ERR_INI_SIZE错误时,获取尝试上载的文件大小?
- 3. 尝试将csv文件读取到字典时发生Python错误
- 4. 尝试读取文件时出错
- 5. 尝试读取jar文件时出错
- 6. 尝试查看tomcat中的html文件时发生404错误
- 7. 尝试在Matlab中打开文件时发生错误
- 8. 尝试从文件读取整数时发生NoSuchElementException?
- 9. 尝试使用TextureAtlas读取包文件时发生异常
- 10. 尝试读取文本文件时遇到错误
- 11. 尝试获取C#中的log4net日志文件路径时发生错误#
- 12. 尝试在netbeans中读取文件时发现文件异常
- 13. 尝试从PHP/Ajax中的数据库读取时发生MySQL错误
- 14. 尝试在MATLAB中获取点的凸包时发生错误
- 15. 尝试获取Ruby中变量的长度时发生错误
- 16. 尝试从C#中的文本框中获取文本值时发生错误
- 17. 尝试读取localStorage时登录错误
- 18. Python当我读取或尝试读取sftp文件时发生了什么?
- 19. 尝试实施时发生iAD错误
- 20. 尝试编译时发生错误Chess.app
- 21. 尝试更新Eclipse时发生错误
- 22. 尝试从文本文件中读取数据时发生的问题
- 23. 读取python中的zip文件时发生内存错误
- 24. 尝试读取文件夹中的第二个文件时Python返回错误
- 25. 尝试从文件读取时超出范围错误?
- 26. 尝试读取隐藏文件时出现分段错误linux
- 27. 尝试读取90 MB EPUB文件时出现内存错误
- 28. Python numpy在尝试读取未压缩的npz文件时引发BadZipfile错误
- 29. 尝试通过grImport导入ps文件时发生错误R
- 30. 当我尝试打开文件时发生C段错误
请指定您正在执行此操作的平台。 – unwind 2012-01-03 16:32:19
我可以问你在装载600Mb数据时会发生什么 - 我希望用户不要操纵或浏览,因为它肯定会对任何与用户相关的交互效率低下无效。与加载大文件有关的问题几乎总是指出需要解决不同的问题,以防止随着时间的推移进入更深更深的洞。分而治之... – 2012-01-04 09:19:14
我正在使用Qt创建者(C++)。 – zi0408 2012-01-04 09:46:25