我使用QFileDialog打开文件并使用QDatastream来读取它。
QString fileName = QFileDialog::getOpenFileName(this, tr("open file"),
" ",
tr("Text (*.c);;Bin(*.bin)"));
QFile f(fileName);
QDataStream readstream(&f);
f.open(QIODevice::ReadOnly);
但在那之后,我必须使用用C编写的函数,所以我对how to get the parameters
有疑问。
我的C功能是:
Ymodem_Transmit (uint8_t *buf, const uint8_t* sendFileName, uint32_t sizeFile)
1. uint8_t *buf
是指向文件起始地址的指针,但我不知道如何从QDataStream获取它。也许我可以将它们读入缓冲区,但我的文件有点大,所以我不想使用大缓冲区。
2. const uint8_t* sendFileName
是一个字符串,如何获得?
即使QFileDialog::getOpenFileName
给我一个Qstring filename
,但我认为它包含文件的路径,而不是文件名。我想要的是一个真正的文件名,我相信一些类功能可以做到这一点,但我可以'找到它。
3. uint32_t sizeFile
我可以使用qint64 QFile::size()
来获取它吗?如果我是对的,如何将qint64
转移到uint32_t
?如果我这样做会这样做:
qint64 filesize=QFile::size();
(uint32_t)filesize;
答案 0 :(得分:1)
我强烈建议您不要使用C函数 - QFile
本身为访问文件系统中的数据提供了一个非常好的界面。如果您想使用QFIleInfo
类和fileName()
成员获取不包含路径的文件名。是的,您可以通过这种方式获取文件大小,但要小心 - 如果您的文件大小相当大(大于可以容纳uint32_t
),您的值将会溢出。