Как форматировать жесткий диск с помощью c++?

Пользователь

от clifford , в категории: C/C++ , 2 года назад

Как форматировать жесткий диск с помощью c++?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от evalyn.barrows , 2 года назад

@clifford 

Для форматирования жесткого диска с помощью C++, можно использовать стандартные библиотеки языка C++ и системные вызовы операционной системы. Ниже приведен пример кода на C++, который демонстрирует, как отформатировать жесткий диск в операционной системе Windows.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <windows.h>
#include <iostream>

int main() {
    std::wstring drive = L"\\.\PhysicalDrive0"; // Укажите номер диска, который необходимо отформатировать
    HANDLE hDrive = CreateFile(drive.c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
    if (hDrive == INVALID_HANDLE_VALUE) {
        std::cerr << "Не удалось открыть диск" << std::endl;
        return 1;
    }
    DWORD bytesReturned = 0;
    DISK_GEOMETRY diskGeometry = { 0 };
    if (!DeviceIoControl(hDrive, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, &diskGeometry, sizeof(diskGeometry), &bytesReturned, NULL)) {
        std::cerr << "Не удалось получить геометрию диска" << std::endl;
        CloseHandle(hDrive);
        return 1;
    }
    DWORD sectorsPerTrack = diskGeometry.SectorsPerTrack;
    DWORD bytesPerSector = diskGeometry.BytesPerSector;
    DWORD tracksPerCylinder = diskGeometry.TracksPerCylinder;
    LARGE_INTEGER diskSize = { 0 };
    diskSize.QuadPart = sectorsPerTrack * bytesPerSector * tracksPerCylinder * diskGeometry.Cylinders.QuadPart;
    DWORD mbrSize = bytesPerSector * diskGeometry.SectorsPerTrack * diskGeometry.TracksPerCylinder;
    char* mbr = new char[mbrSize];
    ZeroMemory(mbr, mbrSize);
    DWORD bytesWritten = 0;
    if (!WriteFile(hDrive, mbr, mbrSize, &bytesWritten, NULL) || bytesWritten != mbrSize) {
        std::cerr << "Не удалось отформатировать диск" << std::endl;
        delete[] mbr;
        CloseHandle(hDrive);
        return 1;
    }
    std::cout << "Диск успешно отформатирован" << std::endl;
    delete[] mbr;
    CloseHandle(hDrive);
    return 0;
}


Приведенный код открывает указанный диск в операционной системе Windows, получает его геометрические параметры и использует их для вычисления размера диска и размера области MBR (Master Boot Record) на диске. Затем он создает буфер размером с MBR и заполняет его нулями. Наконец, он записывает этот буфер на диск, что приводит к его отформатированию.


Важно отметить, что форматирование жесткого диска может привести к потере данных, поэтому перед выполнением форматирования необходимо создать резервные копии важных данных.

Пользователь

от maya , 4 месяца назад

@clifford 

Прежде чем запускать данный код, обязательно выполните следующие шаги:

  1. Установите компилятор C++ (например, MinGW для Windows).
  2. Добавьте необходимые заголовочные файлы и библиотеки в ваш проект (windows.h).
  3. Убедитесь, что у вас есть права администратора для доступа к жесткому диску, который вы собираетесь отформатировать.


Также обратите внимание, что этот код форматирует только область MBR на диске, а не весь диск целиком. Для полного форматирования диска потребуется использовать другие API и процедуры.


Как всегда, будьте осторожны при работе с операциями форматирования дисков, так как это может привести к потере ценных данных. Поэтому перед выполнением форматирования убедитесь, что у вас есть резервные копии всех необходимых файлов.