-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcalcsize.cpp
More file actions
106 lines (94 loc) · 2.31 KB
/
calcsize.cpp
File metadata and controls
106 lines (94 loc) · 2.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include "calcsize.h"
bool calcSize::Finished() const
{
return m_Finished;
}
bool calcSize::Stop() const
{
return m_Stop;
}
bool calcSize::Pause() const
{
return m_Pause;
}
qint64 calcSize::dirSize(QString dirPath) {
if (Stop()){
return 0;
}
qint64 size = 0;
QDir dir(dirPath);
//calculate total size of current directories' files
QDir::Filters fileFilters = QDir::Files|QDir::System|QDir::Hidden;
for(QString filePath : dir.entryList(fileFilters)) {
if (Stop()){
return 0;
}
while(Pause()){
QThread::sleep(1);
}
QFileInfo fi(dir, filePath);
size+= fi.size();
}
//add size of child directories recursively
QDir::Filters dirFilters = QDir::Dirs|QDir::NoDotAndDotDot|QDir::System|QDir::Hidden;
for(QString childDirPath : dir.entryList(dirFilters)){
if (Stop()){
return 0;
}
while(Pause()){
QThread::sleep(1);
}
size+= dirSize(dirPath + QDir::separator() + childDirPath);
}
return size;
}
QString calcSize::formatSize(qint64 size) {
QStringList units = {"Bytes", "KB", "MB", "GB", "TB", "PB"};
int i;
double outputSize = size;
for(i = 0; i < units.size()-1; i++) {
if(outputSize < 1024) break;
outputSize = outputSize/1024;
}
return QString("%0 %1").arg(outputSize, 0, 'f', 2).arg(units[i]);
}
void calcSize::displaySizeUC(const QFileInfo fileInfo)
{
setFinished(false);
QString size;
if (fileInfo.isFile()){
size = formatSize(fileInfo.size());
setFinished(true);
if (!Stop()){
emit calculatingFinishedUC(size);
}
}
else if(fileInfo.isDir()){
size = formatSize(dirSize(fileInfo.absoluteFilePath()));
setFinished(true);
if (!Stop()){
emit calculatingFinishedUC(size);
}
}
}
void calcSize::setFinished(bool Finished)
{
if (m_Finished == Finished)
return;
m_Finished = Finished;
emit FinishedChanged(m_Finished);
}
void calcSize::setStop(bool Stop)
{
if (m_Stop == Stop)
return;
m_Stop = Stop;
emit StopChanged(m_Stop);
}
void calcSize::setPause(bool Pause)
{
if (m_Pause == Pause)
return;
m_Pause = Pause;
emit PauseChanged(m_Pause);
}