有没有其他方法可以将QFile转换为文件?与此不同:
QFile myFile("goforward.raw");
int FileDescriptor = myFile.handle();
FILE* fh = fdopen(FileDescriptor, "rb");发布于 2012-02-27 21:30:08
我想您已经知道在QFile中有各种open、read等方法。也就是说,如果文件未打开,则handle方法将返回错误。
QFile myFile("goforward.raw");
myFile.open(QIODevice::ReadOnly);
int fileHandle = myFile.handle();之后,您可以使用以下命令重新打开它:
FILE* fh = fdopen(fileHandle, "rb");发布于 2013-06-02 03:39:28
我们的应用程序遇到了非常奇怪的问题,并最终将其追溯到QFile/fdopen问题:
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()返回的文件描述符:
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)
发布于 2013-12-24 21:12:41
如果您有文件名,为什么不简单地使用
QFile *file = fopen(filename.toLocal8Bit().data(), "rb");这不是比创建QFile、打开它、检索句柄等简单得多吗?
而且它是相当无bug的.
https://stackoverflow.com/questions/9465727
复制相似问题