如何在Qt方法中打开文件但是使用C语言函数读取它?

时间:2015-02-06 03:35:01

标签: qt

我知道Qt有很多很好的方法来读取文件。但是在我的工作中,我必须使用Qt打开一个文件,并获得一个指向文件起始地址的指针。那么怎么做?< / p>

这是我的代码:

char *buffer; 
if(file.open(QIODevice::ReadOnly))
            {
            QByteArray dataArray=file.readAll();
            buffer=dataArray.data();
        } 

char test[1024];    
for(int i=0;i<1024;i++)
        {
            test[i]=*buffer;
            buffer++;
        }

我使用QByteArray QIODevice::​readAll()从设备读取所有可用数据,并将其作为字节数组返回。

然后我使用char * QByteArray::​data()设置我的指针buffer

但是当我尝试通过for循环读取数据时,我的Qt调试器会给我一个error:read access violation,那么这会怎么样?

BTW,要读取的文件非常大,所以我不能使用缓冲区来读取它们一次。相反,我必须按照我在这里所做的去做。当我读取7kb大小的文件时,我的代码运行良好。当我读到一个700kb-sizes文件时,问题出现了。

1 个答案:

答案 0 :(得分:1)

您获得访问冲突的原因是dataArrayif代码块中声明并超出范围。您想在该块之外声明dataArray,例如:

QByteArray dataArray;
if(file.open(QIODevice::ReadOnly))
{
    dataArray = file.readAll();
}
else
{
    // give error
}

char *buffer = dataArray.data();

char test[1024]; 
for(int i = 0; i < 1024; i++)
{
    test[i] = *buffer;
    buffer++;
}

您的代码中还有其他潜在问题:

首先,如果从文件中读取的数据大小小于1024怎么办?然后,您将读取缓冲区的末尾(更多访问冲突)。

其次,如果文件真的很大怎么办?一次读取所有数据可能会导致交换/分页。