我有一个Qt应用程序,可以通过以下方式调用:
cat bla.bin | myapp
如何在Win、Mac和Linux上最简单地将整个输入(stdin)读入QByteArray?
我尝试了几种方法,但它们似乎都不能在Windows上正常工作:
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
QByteArray content;
//---Test 1: hangs forever, reads 0
while(!std::cin.eof()) {
char arr[1024];
int s = std::cin.readsome(arr,sizeof(arr));
content.append(arr,s);
}
//---Test 2: Runs into timeout
QFile in;
if(!in.open(stdin,QFile::ReadOnly|QFile::Unbuffered)) {
qDebug() << in.errorString();
}
while (in.waitForReadyRead(1000)) {
content+=in.readAll();
}
in.close();
return app.exec();
}
我是否遇到了事件循环问题?或者不需要它也能正常工作吗?
app.exec();
之后启动。尝试在文件关闭之前读取或在调用exec
之后移动读取。 - Lol4t0QFile
。QFile
永远不会报告“ready read”。使用std::cin
的方法应该在任何地方都可以工作,你是否在Windows下编译时使用了CONFIG+=console
? - peppe