【问题标题】:Read output from diskpart从 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 文件的其他解决方案会更好?

【问题讨论】:

  • 请不要多次问同一个问题;这会让以后搜索此网站的人感到困惑。

标签: c++ windows qt


【解决方案1】:

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

【讨论】:

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