从 diskpart 读取输出

Posted

技术标签:

【中文标题】从 diskpart 读取输出【英文标题】:Read output from diskpart 【发布时间】:2018-07-27 14:33:18 【问题描述】:

在格式化笔式驱动器时,我需要读取 diskpart 的输出。这是我在后台运行的格式化代码。

QString exePath = "diskpart.exe";
QString arguments = "/s pendrive.txt";
ShellExecuteW(NULL, NULL, (LPCWSTR)exePath.toStdWString().data(), (LPCWSTR)arguments.toStdWString().data(), NULL, SW_HIDE);

pendrive.txt:

select disk 1
clean
create partition primary
select partition 1
active
format quick fs=ntfs
assign

如何读取输出以检查是否一切都已成功完成?

我发现了这个:

QString arg ="diskpart /s pendrive.txt > output.txt";

但是我该如何使用它呢?它是否正确?这是检查格式化是否成功的最佳方法吗?也许没有.txt 文件的其他解决方案会更好?

【问题讨论】:

请不要多次问同一个问题;这会让以后搜索此网站的人感到困惑。 【参考方案1】:

既然你已经在使用 Qt,为什么不使用 QProcess 呢?这为您节省了使用文本文件的麻烦。只需致电readAllStandardOutput。您甚至可以检查finished 信号,它提供了ExitCode

【讨论】:

我在后台运行这个程序时遇到了问题,这就是我使用 ShellExecute() 的原因。更重要的是,当我将它与 QProcess 一起使用时,我的计算机崩溃了。有没有使用 ShellExecute() 读取输出的解决方案? @RanderEns:如果您使用 QProcess 调用 diskpart 并且它使您的计算机崩溃,我 99% 确定这是 diskpart 的错误参数。 我用 ShellExecute() 运行所有东西,它发生过一次,带有完整的参数列表来格式化 pendrive。当我仅通过选择和清理磁盘对其进行测试时,它工作正常。但是上次真的很奇怪,我还需要在后台运行 ShellExecute() 运行良好。使用 QProcess 时我遇到了问题。 @RanderEns 您如此坚定地声称它,我希望您有一个简短的(30-40 行!)测试用例来重现该问题。如果不是,那么很可能您在做其他根本性错误的事情,并将其归咎于 QProcess + diskpart 组合。

以上是关于从 diskpart 读取输出的主要内容,如果未能解决你的问题,请参考以下文章

# diskpart格式化优盘

怎样用diskpart给硬盘分区

如何使用diskpart命令创建分区

怎么挂载efi分区

磁盘对象管理(diskpart)

diskpart