Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Объём диска


Автор: Yuran 26.4.2006, 20:58
подскажите как мне узнать объём необходимого мне диска?

Я пытаюсь таким способом но почему-то полный объём возвращаеться 0;

  PULARGE_INTEGER FreeBytesAvailable;
  PULARGE_INTEGER TotalNumberOfBytes;
  PULARGE_INTEGER TotalNumberOfFreeBytes;

  BOOL GetDiskFreeSpaceFlag = ::GetDiskFreeSpaceEx
  (dd,  // directory name
  (PULARGE_INTEGER)&FreeBytesAvailable,     // bytes available to caller
  (PULARGE_INTEGER)&TotalNumberOfBytes,     // bytes on disk
  (PULARGE_INTEGER)&TotalNumberOfFreeBytes  // free bytes on disk
  );

  if(GetDiskFreeSpaceFlag != 0)
  {
    Form1->DFreeSpace->Caption=((unsigned long)TotalNumberOfFreeBytes/1024/1000);
    Form1->DTotalSpace->Caption=(unsigned long)TotalNumberOfBytes/1024/1000;
  }


Автор: zhgutov 28.4.2006, 11:50
Для указателей надо выделять память:
Код
typedef union _ULARGE_INTEGER
{
    struct
    {
        DWORD LowPart;
        DWORD HighPart;
    };
    struct
    {
        DWORD LowPart;
        DWORD HighPart;
    } u;
    ULONGLONG QuadPart;
} ULARGE_INTEGER, *PULARGE_INTEGER;

Пиши так:
Код
ULARGE_INTEGER FreeBytesAvailable;
ULARGE_INTEGER TotalNumberOfBytes;
ULARGE_INTEGER TotalNumberOfFreeBytes;

BOOL GetDiskFreeSpaceFlag = ::GetDiskFreeSpaceEx (dd, &FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes);

if (GetDiskFreeSpaceFlag != 0)
{
    Form1->DFreeSpace->Caption = unsigned (TotalNumberOfFreeBytes.QuadPart / 1024 / 1024);
}
 

Автор: The Thing 30.4.2006, 14:13
а еще с дисками в любой сис-ме НТФС или ФАТ.. пофиг - можно работать как с файлами.. открывыаешь на чтение нужный диск.. передвигаешься в конец.. и возвращаешь параметр корретки. Работает 100%. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)