27 #include <QtCore/QSharedData>
28 #include <QtCore/QFile>
33 #include <QtCore/QDir>
36 #include <sys/statvfs.h>
40 class KDiskFreeSpaceInfo::Private :
public QSharedData
56 KDiskFreeSpaceInfo::KDiskFreeSpaceInfo()
62 KDiskFreeSpaceInfo::KDiskFreeSpaceInfo(
const KDiskFreeSpaceInfo& other )
68 KDiskFreeSpaceInfo::~KDiskFreeSpaceInfo()
73 KDiskFreeSpaceInfo& KDiskFreeSpaceInfo::operator=(
const KDiskFreeSpaceInfo& other )
80 bool KDiskFreeSpaceInfo::isValid()
const
86 QString KDiskFreeSpaceInfo::mountPoint()
const
106 return d->size - d->available;
110 KDiskFreeSpaceInfo KDiskFreeSpaceInfo::freeSpaceInfo(
const QString& path )
112 KDiskFreeSpaceInfo info;
117 info.
d->mountPoint = mp->mountPoint();
121 QFileInfo fi(info.d->mountPoint);
122 QString dir = QDir::toNativeSeparators(fi.absoluteDir().canonicalPath());
124 if(GetDiskFreeSpaceExW((LPCWSTR)dir.utf16(),
125 (PULARGE_INTEGER)&availUser,
126 (PULARGE_INTEGER)&info.d->size,
127 (PULARGE_INTEGER)&info.d->available) != 0) {
128 info.d->valid =
true;
131 struct statvfs statvfs_buf;
134 const QString pathArg = info.d->mountPoint.isEmpty() ? path : info.d->mountPoint;
135 if (!statvfs(QFile::encodeName(pathArg).constData(), &statvfs_buf)) {
137 info.d->available = statvfs_buf.f_bavail * blksize;
138 info.d->size = statvfs_buf.f_blocks * blksize;
139 info.d->valid =
true;