2015-06-27 3 views
0

мне нужно найти свободное место в диске, у меня есть следующий код, но не знаю, как преобразовывать его процент,Преобразовать Свободное пространство, чтобы процент Windows, C++

QString drive = "C:/"; 
LPCTSTR   lpDirectoryName = (const wchar_t*)drive.utf16(); 
ULARGE_INTEGER lpFreeBytesAvailable; 
ULARGE_INTEGER lpTotalNumberOfBytes; 
ULARGE_INTEGER lpTotalNumberOfFreeBytes; 
BOOL val = GetDiskFreeSpaceEx(lpDirectoryName,&lpFreeBytesAvailable,&lpTotalNumberOfBytes,&lpTotalNumberOfFreeBytes); 

Может кто-нибудь помочь мне решить это?

Спасибо заранее, Харис

+0

По-видимому, проблема в том, какие из «бесплатных байтов доступны» и «общее количество свободных байтов» использовать. Для этого я предлагаю проверить ** документацию **. И, возможно, спецификация требований, если таковая имеется. –

+0

В основном то, что мне нужно, это проверить freespace, доступное на диске, и если он меньше порога, очистите какой-либо каталог из моего приложения. – Haris

ответ

1

Принимая во внимание квота пользователя (рекомендуется), то вы должны сделать следующее:

double percent_free = 100.0 *(double)lpFreeBytesAvailable.QuadPart/(double)lpTotalNumberOfBytes.QuadPart 

Если квоты пользователя отключены (в большинстве систем), этот стиль lworks, как используется весь диск.

Обратите внимание, что ваш код будет скомпилирован только в сборках Unicode. Лучше написать его как:

BOOL val = GetDiskFreeSpaceEx(_T("C:/"),&lpFreeBytesAvailable,&lpTotalNumberOfBytes,&lpTotalNumberOfFreeBytes); 
+0

Привет, спасибо за ответ, я не получил 'ваш код будет компилироваться только в сборниках Unicode', фактически я запускаю его из Qt Creator, и мой диск будет из QString. – Haris

+0

'GetDiskFreeSpaceEx' - это макрос, который может быть переведен в' GetDiskFreeSpaceExA' или 'GetDiskFreeSpaceExW' в зависимости от типа сборки (unicode/ansi). макрос _T создаст строковый литерал для соответствия. – egur

+0

У меня возникла ошибка при использовании обоих вышеперечисленных типов типов: невозможно преобразовать из 'ULARGE_INTEGER' в 'double'' и '' _T': идентификатор не найден' – Haris