首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将QFile转换为文件*

将QFile转换为文件*
EN

Stack Overflow用户
提问于 2012-02-27 21:22:30
回答 3查看 9.6K关注 0票数 8

有没有其他方法可以将QFile转换为文件?与此不同:

代码语言:javascript
复制
QFile myFile("goforward.raw");
int FileDescriptor = myFile.handle();
FILE* fh = fdopen(FileDescriptor, "rb");
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-27 21:30:08

我想您已经知道在QFile中有各种openread等方法。也就是说,如果文件未打开,则handle方法将返回错误。

代码语言:javascript
复制
QFile myFile("goforward.raw");
myFile.open(QIODevice::ReadOnly);
int fileHandle = myFile.handle();

之后,您可以使用以下命令重新打开它:

代码语言:javascript
复制
FILE* fh = fdopen(fileHandle, "rb");
票数 7
EN

Stack Overflow用户

发布于 2013-06-02 03:39:28

我们的应用程序遇到了非常奇怪的问题,并最终将其追溯到QFile/fdopen问题:

代码语言:javascript
复制
void foo(QString filename)
{
    QFile qf(filename);
    qf.open(QIODevice::ReadOnly);
    int fd = qf.handle();
    FILE* f = fdopen(fd, "rb");
    // do some stuff with f
    fclose(f); // !!! undefined behaviour !!!
}

这段代码的问题是在销毁QFile对象之前调用fclose(f),这是错误的顺序:QTBUG-20372

...so在调用fclose()之前销毁QFile对象,或者复制QFile::handle()返回的文件描述符:

代码语言:javascript
复制
void foo(QString filename)
{
    QFile qf(filename);
    qf.open(QIODevice::ReadOnly);
    int fd = qf.handle();
    FILE* f = fdopen(dup(fd), "rb"); // !!! use dup()
    // do some stuff with f
    fclose(f); // correct
}

附注:我们的应用程序的那些奇怪的问题只在极少数系统上出现,在函数末尾的return语句和该函数的实际返回之间有10秒的延迟。真的很奇怪。因此,这是现实世界中“未定义的行为”的一个例子:o)

票数 13
EN

Stack Overflow用户

发布于 2013-12-24 21:12:41

如果您有文件名,为什么不简单地使用

代码语言:javascript
复制
QFile *file = fopen(filename.toLocal8Bit().data(), "rb");

这不是比创建QFile、打开它、检索句柄等简单得多吗?

而且它是相当无bug的.

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9465727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档