Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Qt: узнать хватит ли места на диске при копировании файлов.  (Прочитано 1076 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн FluffyMan

  • Автор темы
  • Активист
  • *
  • Сообщений: 276
  • Debian 6
    • Просмотр профиля
Собственно вопрос в названии темы.

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

Задача: копирование файла. если не хватает места на диске - сказать об этом пользователю.

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

#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) как ей пользоваться.

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

Пользователь решил продолжить мысль 03 Октября 2012, 10:57:36:
разобрался. в коде должно быть double fKB = 1042
пользоваться так:

double total, free;
fetFreeTotalSpace("D:\", total, free);

после этого в переменных total и free будет полный и оставшийся размер места соответственно.
« Последнее редактирование: 03 Октября 2012, 10:57:36 от FluffyMan »

 

Страница сгенерирована за 0.015 секунд. Запросов: 22.