Отправляет email-рассылки с помощью сервиса Sendsay

За 2013-11-09

[prg] Re[2]: C++. Определение размера диска

Здравствуйте, i_chay.
Насчёт кошмара полностью согласен. уже после своего ответа перечитал
код, и ужаснулся. Кстати говоря программа при запуске не выдаёт ошибок
а вполне запускается. Оказалось что у меня установлен на компе
codeblocks в комплекте с GCC. Запустил, и как и ожидал что получился
там ужас мягко говоря.
остаётся догадыватся как это всё пережил visual c++ компилятор, не
удивлюсь если он и правда сдурел ото всего и скомпилил то что выдало ошибку.

п.с. А вообще эти WinAPI-шные типы уже при виде их сломали мозг.

   2013-11-09 20:44:35 (#2866847)

[prg] Re: C++. Определение размера диска

Приветствую всех.

> выдает ошибку при запуске - по всей видимости, , в программе какая-то
> логическая ошибка,

Логическая ошибка не в программе, а в голове у программиста и заключается она
в отсутствии привычки читать документацию прежде, чем что-либо кодить:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa364937(v=vs.85).aspx

В частности:
The values obtained by this function are of the type ULARGE_INTEGER.
Do not truncate these values to 32 bits.

Посмотрите также в документации, что представляет собой тип ULARGE_INTEGER и
вам станет очевиден тот кошмар, который вы сотворили собственными руками.

Анатолий.

   "i_chay" 2013-11-09 20:16:26 (#2866828)

[prg] Re: C++. Определение размера диска

Добрый день!
Могу ошибатся но по-моему dword это 32-х битовый тип. Т.е. значения от
-2 миллиарда с небольшим до +2 миллиарда с небольшим. Учитывая современные
объёмы жёстких дисков, значения в переменных будут намного больше. Так
что значения в dword в runtime превратятся в неизвестно что. Лучше использовать
Long или ему подобные. Уже не помню, но какие-то аналоги есть.

   2013-11-09 17:18:58 (#2866704)

[prg] C++. Определение размера диска

Здравствуйте, уважаемые!

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

#include <windows.h>

#include <iostream>

#include <fstream>

#include <string>

#include <stdlib.h>

using namespace std;

int main () {

ofstream outfile("out.txt");

DWORD FreeBytesAvailable;

DWORD TotalNumberOfBytes;

DWORD TotalNumberOfFreeBytes;

string sDisk="C:\\";

BOOL flag = GetDiskFreeSpaceEx(

(LPCSTR)sDisk.c_str(),

(PULARGE_INTEGER)&FreeBytesAvailable,

(PULARGE_INTEGER)&TotalNumberOfBytes,

(PULARGE_INTEGER)&TotalNumberOfFreeBytes

);

if (flag != 0) {

outfile << "Свободно: " << (unsigned long)TotalNumberOfFreeBytes << endl;

outfile << "Размер диска: " << (unsigned long)TotalNumberOfBytes << endl;

}

else outfile << "Размер диска определить не удалось!" << endl;

outfile.close();

return 0;

}

Администратор Самарского голосового чата,
Самарского сервера LKF-книг
Грызунов Александр Викторович.

Программа для скачивания LKF-книг с Самарского сервера:
http://www.samaraobs.ru/lkf/lkf_start.exe
Программа для общения в Самарском голосовом чате:
http://samaraobs.ru/chat/TeamTalk.exe

   2013-11-09 14:33:15 (#2866612)