@KeeVeeG

Почему выбивает ошибку при получении объема тома?

Добрый день, делаю лабораторную работу. Нужно вывести имя томов и их объем. Почему то при вызове GetDiskFreeSpaceEx() программа останавливается и даже не выдает имена следующих томов. Не срабатывает даже последний вывод "Конец". От администратора пробовал запускать.

#include <windows.h>
#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
    setlocale(LC_ALL, "Russian");

    int WinVersion1 = (LOBYTE(LOWORD(GetVersion())));
    int WinVersion2 = (HIBYTE(LOWORD(GetVersion())));
    cout <<"Версия операционной системы: "<<WinVersion1<<"."<<WinVersion2;

    char SystemDir[256];
    GetSystemDirectory(SystemDir, 256);
    cout <<"\nСистемный каталог: "<<SystemDir;

    char PC_Name[256];
    DWORD PC_NameSize;
	PC_NameSize=sizeof(PC_Name);
	GetComputerName(PC_Name,&PC_NameSize);
    cout <<"\nНазвание компьютера: "<<PC_Name;

    char UserName[256];
    DWORD UserNameSize;
	UserNameSize=sizeof(UserName);
	GetUserName(UserName,&UserNameSize);
    cout <<"\nИмя пользователя: "<<UserName;

    char Volume[256];
    char Path[256];
    PULARGE_INTEGER Free;
    PULARGE_INTEGER Total;
    PULARGE_INTEGER TotalBytes;

	cout<<"\n\nСписок томов:";
HANDLE search = FindFirstVolume(Volume, sizeof(Volume));
do {
    cout <<"\n"<<Volume;
    GetDiskFreeSpaceEx(Volume, Free, Total, TotalBytes); //
    cout<<"\Общий объяем:\n"<<Total<<" Байт\nСвободного места:\n"<<Free<<" Байт";
}
while (FindNextVolume(search, Volume, sizeof(Volume)));

cout << "Конец";
}

6puXTlxO.png
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Почему то при вызове GetDiskFreeSpaceEx() программа останавливается

PULARGE_INTEGER Free;
    PULARGE_INTEGER Total;
    PULARGE_INTEGER TotalBytes;

  cout<<"\n\nСписок томов:";
HANDLE search = FindFirstVolume(Volume, sizeof(Volume));
do {
    cout <<"\n"<<Volume;
    GetDiskFreeSpaceEx(Volume, Free, Total, TotalBytes); //

Потому что PULARGE_INTEGER -- это указатели (на что указывает P в начале имени типа согласно венгерской нотации). Ты вызываешь функцию с неинициализированными указателями, она пишет неизвестно куда, приложение падает.
Правильно было бы сделать так:
ULARGE_INTEGER Free;
    ULARGE_INTEGER Total;
    ULARGE_INTEGER TotalBytes;

  cout<<"\n\nСписок томов:";
HANDLE search = FindFirstVolume(Volume, sizeof(Volume));
do {
    cout <<"\n"<<Volume;
    GetDiskFreeSpaceEx(Volume, &Free, &Total, &TotalBytes); //
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы