Я хочу отформатировать диск в C++, но когда я пытался использовать функцию Формата windows.h, я не мог найти образец или способ использовать это. Я также не хочу взаимодействовать пользователем, чтобы добраться хорошо или отменить так, я не могу использовать SHFormat
Кто-либо знает, как я могу сделать это?
Вы можете использовать CreateProcess для запуска скрытой копии cmd. Команда формата exe и подайте ей символы для обработки запроса. Это на Паскале, но это все вызовы API, поэтому перевод должен быть довольно легким. Вам также нужно будет добавить некоторую обработку ошибок и обязательно тщательно ее протестировать.
Win32_Volume :: Format был добавлен только в Windows 2003, поэтому он не будет работать, если вам потребуется поддержка WinXP или Windows 2000.
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;
Вы можете использовать функцию SHFormatDrive для отображения диалогового окна «Форматирование диска» в Windows.
C ++ не предлагает API такого низкого уровня.
Какую ОС / платформу вы используете?
В Windows есть WMI API, который это делает: Win32_Volume Format
Или вы можете попробовать использовать «system» (или в Windows «ShellExecute» ?);
Удачи.
Макс.