我想用c++格式化驱动器,但是当我尝试使用windows.h的Format函数时,我找不到示例或使用它的方法。 我也不想通过用户交互来确定或取消,所以我不能使用 SHFormat
有人知道我该怎么做吗?
您可以使用 SHFormatDrive 函数在 Windows 中显示“格式化驱动器”对话框。
您可以使用 CreateProcess 启动 cmd.exe 格式命令的隐藏副本,并为其提供字符来处理提示。 这是 Pascal 语言,但都是 API 调用,所以应该很容易翻译。 您还需要添加一些错误处理,并确保对其进行广泛的测试。
Win32_Volume::Format 仅在 Windows 2003 中添加,因此如果您需要 WinXP 或 Win2K 支持,则无法使用。
procedure FormatFloppy;
var
sa: TSecurityAttributes;
si: TStartupInfo;
pi: TProcessInformation;
BytesWritten: LongWord;
hInRead, hInWrite: THandle;
begin
// Initialize security information
sa.nLength := SizeOf(sa);
sa.lpSecurityDescriptor := nil;
sa.bInheritHandle := True;
CreatePipe(hInRead, hInWrite, @sa, 0);
// Initialize startup info
ZeroMemory(@si, SizeOf(si));
si.cb := SizeOf(si);
si.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
si.wShowWindow := SW_HIDE;
si.hStdInput := hInRead;
si.hStdOutput := GetStdHandle(STD_OUTPUT_HANDLE);
si.hStdError := GetStdHandle(STD_ERROR_HANDLE);
// Start process
ZeroMemory(@pi, SizeOf(pi));
CreateProcess(nil, 'cmd /c format a: /fs:FAT /F:1.44 /V:', nil, nil, True,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, si, pi);
CloseHandle(pi.hThread);
CloseHandle(hInRead);
// Write '<enter>' to start processing, and 'n<enter>' to respond to question at end
WriteFile(hInWrite, #13#10'N'#13#10, 5, BytesWritten, nil);
CloseHandle(hInWrite);
// Wait for process to exit
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
end;
正确的做法是使用虚拟磁盘服务FormatPartition方法。
C++ 不提供如此低级的 API。
您使用什么操作系统/平台?
在 Windows 上,有一个 WMI API 可以执行此操作:Win32_Volume Format
或者你可以尝试使用“system”(或者在 Windows 上,“ShellExecute”?);
祝你好运。
最大。
您可以调用
system("format C: /FS:NTFS /X /Q /y");
,其中“C:”是要格式化的磁盘。
您可以使用Vds。
您现在可以调用 FormatPartition 的接口了。
例如,请参阅我在格式化 VHD 磁盘
中的回答