FDD и тест дискеты

Тема в разделе "WASM.ASSEMBLER", создана пользователем ZaikinM, 8 авг 2006.

  1. ZaikinM

    ZaikinM New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    16
    Добрый день.
    Вопрос такой, мне нужно определить исправна ли дискета для записи, при этом не теряя того что на ней уже существует. Я вот что подумал по этому поводу. Считать файловую таблицу, считать данные любого файла, всмысле размер и где расположен, затем прочесть его и посчиатать его размер, если не совпадаеь с данными из файловой таблицы, значит дискета испорченя.
    Вопрос, прав ли я ? И может кто то подскажет болле грамотные способы.
    Заранее благодарен Максим заранее благодарен Максим Заикин.
     
  2. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Прочитать всю дискету посекторно. Чтением одного файла не определишь, нормальная она или нет.
     
  3. ZaikinM

    ZaikinM New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    16
    А можно кусок примерного кода. Заранее благодарен.
     
  4. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    if ! dd if=/dev/fd0 of=/dev/null; then echo выкинь дискету на помойку; fi
     
  5. ZaikinM

    ZaikinM New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    16
    Не юниксовая тема не катит ) нужна win32
     
  6. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Код (Text):
    1. bool IsValidDiskette()
    2. {
    3.     DWORD dwBytesRead = 0;
    4.     BYTE  SectorData[512];
    5.     HANDLE hDrive = NULL;
    6.     DWORD SectorsCount = 0;
    7.    
    8.     hDrive = CreateFile("\\\\.\\a:",
    9.                         GENERIC_READ,
    10.                         FILE_SHARE_READ|FILE_SHARE_WRITE,
    11.                         NULL,
    12.                         OPEN_EXISTING,
    13.                         0,
    14.                         NULL);
    15.     if (hDrive == INVALID_HANDLE_VALUE) return false;
    16.  
    17.     SectorsCount = GetFileSize(hDrive, NULL);
    18.     SectorsCount = (SectorCount / 512) + (SectorsCount % 512)?1:0;
    19.  
    20.     while(SectorsCount--)
    21.     {
    22.         if (!ReadFile(hDrive, SectorData, 512, &dwBytesRead, NULL) ||
    23.             dwBytesRead != 512)
    24.         {
    25.             CloseHandle(hDrive);
    26.             return false;
    27.         }
    28.     }
    29.    
    30.     CloseHandle(hDrive);
    31.     return true;
    32. }
    не проверял :)