crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Узнать свободное место на диске
fluffyMan2000
  опции профиля:
сообщение 1.10.2012, 10:05
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 39
Регистрация: 13.8.2012
Пользователь №: 3481

Спасибо сказали: 0 раз(а)




Репутация:   0  


Собственно вопрос в названии темы.

Нужно сделать кроссплатформенно.

видел такаую функцию

#ifdef _WIN32
    #include <windows.h>
#else // linux stuff
    #include <sys/vfs.h>
    #include <sys/stat.h>
#endif // _WIN32

bool getFreeTotalSpace(const QString& sDirPath,double& fTotal, double& fFree)
{
#ifdef _WIN32

    QString sCurDir = QDir::current().absPath();
    QDir::setCurrent( sDirPath );
    
    ULARGE_INTEGER free,total;
    bool bRes = ::GetDiskFreeSpaceExA( 0 , &free , &total , NULL );
    if ( !bRes ) return false;

    QDir::setCurrent( sCurDir );

    fFree = static_cast<double>( static_cast<__int64>(free.QuadPart) ) / [b]fKB[/b];
    fTotal = static_cast<double>( static_cast<__int64>(total.QuadPart) ) / [b]fKB[/b];

#else //linux

    struct stat stst;
    struct statfs stfs;

    if ( ::stat(sDirPath.local8Bit(),&stst) == -1 ) return false;
    if ( ::statfs(sDirPath.local8Bit(),&stfs) == -1 ) return false;

    fFree = stfs.f_bavail * ( stst.st_blksize / [b]fKB [/b]);
    fTotal = stfs.f_blocks * ( stst.st_blksize / [b]fKB [/b]);

#endif // _WIN32

    return true;
}


но я не понимаю:
1) что такое fKB
2) почему она возвращает булевое значение, а не объем оставшегося места
3) как ей пользоваться.

помогите разобраться

Собственно вопрос в названии темы.

Нужно сделать кроссплатформенно.

видел такаую функцию

#ifdef _WIN32
    #include <windows.h>
#else // linux stuff
    #include <sys/vfs.h>
    #include <sys/stat.h>
#endif // _WIN32

bool getFreeTotalSpace(const QString& sDirPath,double& fTotal, double& fFree)
{
#ifdef _WIN32

    QString sCurDir = QDir::current().absPath();
    QDir::setCurrent( sDirPath );
    
    ULARGE_INTEGER free,total;
    bool bRes = ::GetDiskFreeSpaceExA( 0 , &free , &total , NULL );
    if ( !bRes ) return false;

    QDir::setCurrent( sCurDir );

    fFree = static_cast<double>( static_cast<__int64>(free.QuadPart) ) / fKB;
    fTotal = static_cast<double>( static_cast<__int64>(total.QuadPart) ) / fKB;

#else //linux

    struct stat stst;
    struct statfs stfs;

    if ( ::stat(sDirPath.local8Bit(),&stst) == -1 ) return false;
    if ( ::statfs(sDirPath.local8Bit(),&stfs) == -1 ) return false;

    fFree = stfs.f_bavail * ( stst.st_blksize / fKB );
    fTotal = stfs.f_blocks * ( stst.st_blksize / fKB );

#endif // _WIN32

    return true;
}


но я не понимаю:
1) что такое fKB
2) почему она возвращает булевое значение, а не объем оставшегося места
3) как ей пользоваться.

помогите разобраться



Собственно вопрос в названии темы.

Нужно сделать кроссплатформенно.

видел такаую функцию

#ifdef _WIN32
    #include <windows.h>
#else // linux stuff
    #include <sys/vfs.h>
    #include <sys/stat.h>
#endif // _WIN32

bool getFreeTotalSpace(const QString& sDirPath,double& fTotal, double& fFree)
{
#ifdef _WIN32

    QString sCurDir = QDir::current().absPath();
    QDir::setCurrent( sDirPath );
    
    ULARGE_INTEGER free,total;
    bool bRes = ::GetDiskFreeSpaceExA( 0 , &free , &total , NULL );
    if ( !bRes ) return false;

    QDir::setCurrent( sCurDir );

    fFree = static_cast<double>( static_cast<__int64>(free.QuadPart) ) / [b]fKB[/b];
    fTotal = static_cast<double>( static_cast<__int64>(total.QuadPart) ) / [b]fKB[/b];

#else //linux

    struct stat stst;
    struct statfs stfs;

    if ( ::stat(sDirPath.local8Bit(),&stst) == -1 ) return false;
    if ( ::statfs(sDirPath.local8Bit(),&stfs) == -1 ) return false;

    fFree = stfs.f_bavail * ( stst.st_blksize / [b]fKB [/b]);
    fTotal = stfs.f_blocks * ( stst.st_blksize / [b]fKB [/b]);

#endif // _WIN32

    return true;
}


но я не понимаю:
1) что такое fKB
2) почему она возвращает булевое значение, а не объем оставшегося места
3) как ей пользоваться.

помогите разобраться

Собственно вопрос в названии темы.

Нужно сделать кроссплатформенно.

видел такаую функцию

#ifdef _WIN32
    #include <windows.h>
#else // linux stuff
    #include <sys/vfs.h>
    #include <sys/stat.h>
#endif // _WIN32

bool getFreeTotalSpace(const QString& sDirPath,double& fTotal, double& fFree)
{
#ifdef _WIN32

    QString sCurDir = QDir::current().absPath();
    QDir::setCurrent( sDirPath );
    
    ULARGE_INTEGER free,total;
    bool bRes = ::GetDiskFreeSpaceExA( 0 , &free , &total , NULL );
    if ( !bRes ) return false;

    QDir::setCurrent( sCurDir );

    fFree = static_cast<double>( static_cast<__int64>(free.QuadPart) ) / fKB;
    fTotal = static_cast<double>( static_cast<__int64>(total.QuadPart) ) / fKB;

#else //linux

    struct stat stst;
    struct statfs stfs;

    if ( ::stat(sDirPath.local8Bit(),&stst) == -1 ) return false;
    if ( ::statfs(sDirPath.local8Bit(),&stfs) == -1 ) return false;

    fFree = stfs.f_bavail * ( stst.st_blksize / fKB;
    fTotal = stfs.f_blocks * ( stst.st_blksize / fKB );

#endif // _WIN32

    return true;
}


но я не понимаю:
1) что такое fKB
2) почему она возвращает булевое значение, а не объем оставшегося места
3) как ей пользоваться.

помогите разобраться

вывывывыв

блин, как здесь редактировать. нихрена не пойму
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Snake174
  опции профиля:
сообщение 1.10.2012, 11:03
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 89
Регистрация: 18.4.2011
Из: Миасс
Пользователь №: 2613

Спасибо сказали: 9 раз(а)




Репутация:   0  


Ну я так понимаю:
double fTotal;  // общий размер диска
double fFree;    // свободное место на диске
QString path = "...";

if (!getFreeTotalSpace( path, fTotal, fFree ))
  qDebug() << "Can't get free space on " << path;


В переменных fTotal и fFree будет общий размер и размер свободного места.

Сообщение отредактировал Snake174 - 1.10.2012, 11:04
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
fluffyMan2000
  опции профиля:
сообщение 1.10.2012, 20:07
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 39
Регистрация: 13.8.2012
Пользователь №: 3481

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Snake174 @ 1.10.2012, 11:03) *
Ну я так понимаю:
double fTotal;  // общий размер диска
double fFree;    // свободное место на диске
QString path = "...";

if (!getFreeTotalSpace( path, fTotal, fFree ))
  qDebug() << "Can't get free space on " << path;


В переменных fTotal и fFree будет общий размер и размер свободного места.


ок. а что такое fKB?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 1.12.2024, 13:01