Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать объем диска 
:(
    Опции темы
MishaVinogradov
Дата 6.3.2005, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 18.2.2005

Репутация: нет
Всего: 1



Вопрос даже скорее не по API, а по работе с компилятором.
Он почему то не хочет видеть константы GET_LENGTH_INFORMATION и IOCTL_DISK_GET_LENGTH_INFO , которые определены в include-<winioctl.h>.
Причем С++ - NET.
Подскажите в чем дело? Ведь IOCTL_DISK_GET_DRIVE_GEOMETRY он видит и работает с этим прекрасно. Заранее благодарен. smile

Код

#include "stdafx.h"
#include <windows.h>
#include <winioctl.h>


#using <mscorlib.dll>


using namespace System;



BOOL GetDriveGeometry(DISK_GEOMETRY *pdg)
{
 HANDLE hDevice;               // handle to the drive to be examined
 BOOL bResult;                 // results flag
 DWORD junk;                   // discard results
 GET_LENGTH_INFORMATION DskSize;

 hDevice = CreateFile("\\\\.\\PhysicalDrive0",  // drive to open
                   0,                // no access to the drive
                   FILE_SHARE_READ | // share mode
                   FILE_SHARE_WRITE,
                   NULL,             // default security attributes
                   OPEN_EXISTING,    // disposition
                   0,                // file attributes
                   NULL);            // do not copy file attributes

 if (hDevice == INVALID_HANDLE_VALUE) // cannot open the drive
 {
   return (FALSE);
 }

 bResult = DeviceIoControl(hDevice,  // device to be queried
     IOCTL_DISK_GET_DRIVE_GEOMETRY,  // operation to perform
                            NULL, 0, // no input buffer
                           pdg, sizeof(*pdg),     // output buffer
                           &junk,                 // # bytes returned
                           (LPOVERLAPPED) NULL);  // synchronous I/O

 bResult = DeviceIoControl(hDevice,  // device to be queried
     IOCTL_DISK_GET_LENGTH_INFO,  // operation to perform
                            NULL, 0, // no input buffer
                           DskSize, sizeof(*DskSize),     // output buffer
                           &junk,                 // # bytes returned
                           (LPOVERLAPPED) NULL);  // synchronous I/O
 printf("Размер диска %I64d\n",DskSize.Length);

 CloseHandle(hDevice);

 return (bResult);
}

int _tmain(int argc, char *argv[])
{
 _int8 s;
 DISK_GEOMETRY pdg;            // disk drive geometry structure
 BOOL bResult;                 // generic results flag
 ULONGLONG DiskSize;           // size of the drive, in bytes
 
 bResult = GetDriveGeometry (&pdg);

 if (bResult)
 {
   printf("Cylinders = %I64d\n", pdg.Cylinders);
   printf("Tracks per cylinder = %ld\n", (ULONG) pdg.TracksPerCylinder);
   printf("Sectors per track = %ld\n", (ULONG) pdg.SectorsPerTrack);
   printf("Bytes per sector = %ld\n", (ULONG) pdg.BytesPerSector);

   DiskSize = pdg.Cylinders.QuadPart * (ULONG)pdg.TracksPerCylinder *
     (ULONG)pdg.SectorsPerTrack * (ULONG)pdg.BytesPerSector;
   printf("Disk size = %I64d (Bytes) = %I64d (Mb)\n", DiskSize,
          DiskSize / (1024 * 1024));
 }
 else
 {
   printf ("GetDriveGeometry failed. Error %ld.\n", GetLastError ());
 }
 s=getchar();
 return ((int)bResult);
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0368 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.