我已编写以下代码
QString WctUtils::getDiskSpace( )
{
static QString diskSpaceCmd ( qgetenv("WINDIR")
+ "\\system32\\wbem\\wmic LOGICALDISK GET Name,FreeSpace,Size,Description/value");
QProcess proc;
QByteArray qba;
proc.start(diskSpaceCmd);
if(proc.waitForFinished(-1))
{
qba = proc.readAllStandardOutput();
qba = qba.trimmed();
qba.replace('\r', ' ');
qba.replace('\n',' ');
QList<QByteArray> lines = qba.split('\n');
}
QString diskSpace(qba);
return (diskSpace);
}
获得的输出是:
{
"Service": "20170131184024",
"diskinfo": "Description=Local Fixed Disk FreeSpace=421098377216 Name=C: Size=499875049472 Description=CD-ROM Disc FreeSpace= Name=D: Size= Description=Local Fixed Disk FreeSpace=324859035648 Name=E: Size=487687450624 Description=CD-ROM Disc FreeSpace=0 Name=F: Size=553459712",
}
预期输出
{
"Service": "20170131184024",
"diskinfo": "Description=Local Fixed Disk FreeSpace=421098377216 Name=C: Size=499875049472
Description=CD-ROM Disc FreeSpace= Name=D: Size=
Description=Local Fixed Disk FreeSpace=324859035648 Name=E: Size=487687450624
Description=CD-ROM Disc FreeSpace=0 Name=F: Size=553459712"
}
如何在多行中获取此磁盘信息行?如何将qbyte数组的一部分分成多行?
答案 0 :(得分:0)
您自己从字符串中删除所有\n
个符号,然后立即尝试将其拆分到\n
分隔符上,当然它不起作用,因为没有剩余\n
在字符串中:
qba.replace('\n',' ');
QList<QByteArray> lines = qba.split('\n');
做你想做的事的一种方法是@Some程序员老兄在评论中建议。另一种方法是在\n
上拆分整行,然后你将拥有一个字符串数组,可能有更多元素而不是你需要的。然后你可以遍历那个数组(同时将它输出到控制台或你需要的任何地方),并且只在你修改“描述”部分时添加换行符:
QList<QByteArray> lines = qba.split('\n');
for(const QByteArray& line : lines)
{
if(line.startsWith("Description")
cout << "\n" << line.toStdString();
else
cout << line.toStdString();
}