2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 C++ большие числа
Сообщение11.10.2009, 10:33 


31/08/09
183
Мне надо по ОСО вывести количество свободный байт на жёстком диске, но не получается т.к. число там мощное, ка это сделать?
Что-то типа такого
Код:
  double i = 59000000000;
  cout << i;


 Профиль  
                  
 
 Re: C++ большие числа
Сообщение11.10.2009, 11:17 
Заслуженный участник


28/04/09
1933
Код:
long long i = 59000000000;

 Профиль  
                  
 
 Re: C++ большие числа
Сообщение11.10.2009, 11:23 


31/08/09
183
Вот на это
Код:
long long i = 59000000000;

получаю вот это
Код:
In function `int main()':
35: error: integer constant is too large for "long" type

 Профиль  
                  
 
 Re: C++ большие числа
Сообщение11.10.2009, 11:37 
Заслуженный участник


26/07/09
1559
Алматы
В Win32, API-функция, возвращающая информацию о свободном месте на диске имеет прототип long GetFreeSpaceForDrive(...). Т.е. типа long должно хватать.

 Профиль  
                  
 
 Re: C++ большие числа
Сообщение11.10.2009, 11:46 
Заслуженный участник
Аватара пользователя


03/06/09
1497
Напишите свой класс длинных чисел

P. S. Зачем выводить кол-во свободных байт на диске точно? Кому эта точность нужна? Достаточно несколько цифр мантиссы и порядок, типа 3.14 ГБ

 Профиль  
                  
 
 Re: C++ большие числа
Сообщение11.10.2009, 11:56 


31/08/09
183
meduza в сообщении #250845 писал(а):
Напишите свой класс длинных чисел

P. S. Зачем выводить кол-во свободных байт на диске точно? Кому эта точность нужна? Достаточно несколько цифр мантиссы и порядок, типа 3.14 ГБ


А как это сделать? мне на самом деле хоть в чём показывало лиж бы показывало (хоть меги, хоть гиги)

 Профиль  
                  
 
 Re: C++ большие числа
Сообщение11.10.2009, 15:30 
Заслуженный участник


04/05/09
4582
В VC++ есть тип 64-битных целых: __int64_t или unsigned __int64_t
long long - это в GCC/ICC.

Для того, чтобы получить размер диска полностью, без 32-битных ограничений, пользуйтесь функциями: GetDiskFreeSpace или GetDiskFreeSpaceEx

 Профиль  
                  
 
 Re: C++ большие числа
Сообщение11.10.2009, 15:36 


31/08/09
183
Мнен помогли вот код если кому надо
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
#include <windows.h>
#include <windowsx.h>
#include <string.h>
#include <iostream.h>

HANDLE hFile;
HANDLE hFileNew;
DWORD d;
double tmp;
char c;
int main()
{
    hFile=CreateFile("1.txt",GENERIC_READ,FILE_SHARE_READ,NULL,
    OPEN_EXISTING,FILE_ATTRIBUTE_READONLY,NULL);

    DWORD ff=GetFileSize(hFile,NULL);
    char buf[ff];
    for(int i=0;i<ff;i++)
    {
        ReadFile(hFile,&c,1,&d,NULL);
        buf[i]=c;
        cout <<c;
        if(i!=0 && i%2000==0) getchar();
    }

    hFileNew=CreateFile("copy.txt",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,
    CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

    WriteFile(hFileNew,buf,strlen(buf),&d,NULL);

    DWORD dwSectorsPerClusters;
    DWORD dwBytesPerSectors;
    DWORD dwNumberOfFreeClusters;
    DWORD dwTotalNumberOfClusters;

    GetDiskFreeSpace("C:\\",&dwSectorsPerClusters,
    &dwBytesPerSectors,&dwNumberOfFreeClusters,
    &dwTotalNumberOfClusters);

    //cout << "\n\n\ndwSectorsPerClusters=" << dwSectorsPerClusters <<"\n";
    //cout << "dwBytesPerSectors=" << dwBytesPerSectors <<"\n";
    //cout << "dwNumberOfFreeClusters=" << dwNumberOfFreeClusters <<"\n";
    //cout << "dwTotalNumberOfClusters=" << dwTotalNumberOfClusters <<"\n";

    tmp = dwSectorsPerClusters*dwNumberOfFreeClusters;
    tmp = tmp/1024;
    tmp = tmp/1024*dwBytesPerSectors;
    cout << "\nFree space = " <<tmp << " mb";
 return 0;
}
 

 Профиль  
                  
 
 Re: C++ большие числа
Сообщение11.10.2009, 18:53 
Заслуженный участник


09/08/09
3438
С.Петербург
venco в сообщении #250909 писал(а):
В VC++ есть тип 64-битных целых: __int64_t или unsigned __int64_t
long long - это в GCC/ICC.

В VC++ long long тоже есть. По крайней мере, начиная с VS2003.

 Профиль  
                  
 
 Re: C++ большие числа
Сообщение11.10.2009, 19:53 


31/08/09
183
у меня кодеблокс long long не берет

-- Вс окт 11, 2009 20:53:34 --

у меня кодеблокс long long не берет

 Профиль  
                  
 
 Re: C++ большие числа
Сообщение11.10.2009, 19:59 
Заслуженный участник


09/08/09
3438
С.Петербург
mycoding в сообщении #250982 писал(а):
у меня кодеблокс long long не берет
А что там за компилятор используется?
Это, вообще-то, нестандартный тип; его все компиляторы не обязаны поддерживать.

 Профиль  
                  
 
 Re: C++ большие числа
Сообщение13.10.2009, 18:08 


31/08/09
183
Компилятор mingw

 Профиль  
                  
 
 Re: C++ большие числа
Сообщение17.10.2009, 21:30 


10/06/09
111
у меня тоже Code::Blocks 8.02, там всё работает. хотите, пришлю архив по почте 23Мб весит.
И ещё: mingw - это не компилятор.
Если интересно, что это, то вот: ru.wikipedia.org/wiki/MinGW
Code::Block поддерживает различные комп-ры, если только они у вас есть. Стандартный же компилятор у вас, скорее всего, GNU GCC Compiler, который от вижуаловского почти не отличается

 Профиль  
                  
 
 Re: C++ большие числа
Сообщение18.10.2009, 02:01 
Заслуженный участник


26/07/09
1559
Алматы
Цитата:
пришлю архив по почте 23Мб весит

Звучит как угроза. :) Это ж как архив раздуется при пересылке! Лучше залить на файлобменник.

Цитата:
GNU GCC Compiler, который от вижуаловского почти не отличается

Очень сильно отличается. Причем C/C++ компиляторы из GCC во многих отношениях лучше поддерживают стандарт чем MS VS -> cl.exe. Хотя cl тоже не плохо работает с C-кодом, это да. Но что может сравниться с кроссплатформенностью и опенсорсностью gcc? .NET? И тот нет. :)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: mihaild


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group