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, Супермодераторы



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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