Формат диска с ++ - PullRequest
       19

Формат диска с ++

7 голосов
/ 15 апреля 2010

Я хочу отформатировать диск в c ++, но когда я попытался использовать функцию Format в windows.h, я не смог найти образец или способ его использования. Я также не хочу взаимодействовать с пользователем, чтобы получить нормально или отменить, поэтому я не могу использовать SHFormat

Кто-нибудь знает, как я могу это сделать?

Ответы [ 5 ]

6 голосов
/ 15 апреля 2010

Вы можете использовать функцию SHFormatDrive для отображения диалогового окна «Форматировать диск» в Windows.

5 голосов
/ 16 апреля 2010

Вы можете использовать CreateProcess , чтобы запустить скрытую копию команды формата cmd.exe и передать ей символы для обработки запроса. Это на Паскале, но это все вызовы API, поэтому он должен легко переводиться. Вам также необходимо добавить некоторую обработку ошибок и тщательно ее протестировать.

Win32_Volume :: Формат был добавлен только в 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;
2 голосов
/ 04 сентября 2013

Правильный способ сделать это - использовать Virtual Disk Service FormatPartition метод.

1 голос
/ 15 апреля 2010

C ++ не предлагает API такого низкого уровня.

Какую ОС / платформу вы используете?

В Windows есть API-интерфейс WMI, который делает это: Формат Win32_Volume

Или вы можете попробовать использовать «system» (или в Windows «ShellExecute»?);

Удачи.

Макс.

0 голосов
/ 11 октября 2018

Вы можете позвонить system("format C: /FS:NTFS /X /Q /y");, где "C:" - диск для форматирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...