Click here to Skip to main content
Licence CPOL
First Posted 6 Apr 2003
Views 949,090
Bookmarked 28 times

Disk free space

By | 6 Apr 2003 | Article
This code is used to check for free space available on logical disks

Sample Image - Harddisk.jpg

Introduction

This code is used to check for free space available on logical disks.

How to use it

Copy the source files HardDiskManager.cpp and HardDiskManager.h to your project directory and add them to your project.

CHardDiskManager::CHardDiskManager()
{
    // bytes available to caller
    m_uliFreeBytesAvailable.QuadPart = 0L;

    // bytes on disk
    m_uliTotalNumberOfBytes.QuadPart = 0L;

    // free bytes on disk
    m_uliTotalNumberOfFreeBytes.QuadPart = 0L;
}

CHardDiskManager::~CHardDiskManager()
{
}

bool CHardDiskManager::CheckFreeSpace(LPCTSTR lpDirectoryName)
{
    if( !GetDiskFreeSpaceEx(
        lpDirectoryName,                  // directory name
        &m_uliFreeBytesAvailable,         // bytes available to caller
        &m_uliTotalNumberOfBytes,         // bytes on disk
        &m_uliTotalNumberOfFreeBytes) )   // free bytes on disk
        return false;

    return true;
}

DWORD64 CHardDiskManager::GetFreeBytesAvailable(void)
{ 
    return m_uliFreeBytesAvailable.QuadPart;
}

DWORD64 CHardDiskManager::GetTotalNumberOfBytes(void)
{ 
    return m_uliTotalNumberOfBytes.QuadPart;
}

DWORD64 CHardDiskManager::GetTotalNumberOfFreeBytes(void)
{ 
    return m_uliTotalNumberOfFreeBytes.QuadPart;
}

double CHardDiskManager::GetFreeGBytesAvailable(void)
{ 
    return (double)(
        (signed __int64)(m_uliFreeBytesAvailable.QuadPart) /
        1.0e9
    );
}

double CHardDiskManager::GetTotalNumberOfGBytes(void)
{ 
    return (double)(
        (signed __int64)(m_uliTotalNumberOfBytes.QuadPart) /
        1.0e9
    );
}

double CHardDiskManager::GetTotalNumberOfFreeGBytes(void)
{ 
    return (double)(
        (signed __int64)(m_uliTotalNumberOfFreeBytes.QuadPart) /
        1.0e9
    );
}

//
// Application
//
#include "HardDiskManager.h"

using namespace std;


void main( int argc, char** argv ) 
{
    CHardDiskManager manager;

    // Set the directory name with " : " 
    // Ex:. C: , c: , F: , ...
    manager.CheckFreeSpace("c:");

    cout << "Drive C:\\" << endl;

    cout << "FreeBytesAvailable:     " <<
        manager.GetFreeGBytesAvailable() <<
        " GBytes. " << endl;
    
    cout << "TotalNumberOfBytes:     " <<
        manager.GetTotalNumberOfGBytes()
        << " GBytes. " << endl;

    cout << "TotalNumberOfFreeBytes: " <<
        manager.GetTotalNumberOfFreeGBytes() <<
        " GBytes. " << endl;

    manager.CheckFreeSpace("d:");

    cout << "Drive D:\\" << endl;

    cout << "FreeBytesAvailable:     " <<
        manager.GetFreeGBytesAvailable()
        << " GBytes. " << endl;

    cout << "TotalNumberOfBytes:     " <<
        manager.GetTotalNumberOfGBytes()
        << " GBytes. " << endl;

    cout << "TotalNumberOfFreeBytes: " <<
        manager.GetTotalNumberOfFreeGBytes() <<
        " GBytes. " << endl;

    return 0;
}

///////////////////////////////////////////////////////////////

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Daniel Ribeiro

Systems Engineer

Brazil Brazil

Member

Senior System Engineer with more than 10 year of experience in embedded software for Tracking systems, Media Gateways and Multimedia systems.
Skill in C/C++, Java (SE & ME), C#, MFC, .NET, ACE framework, LUA and others.
Protocols SIP, MEGACO and MGCP.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralKernal mode debugging of driver PinmemberSavita Kashyap0:49 18 Dec '04  
GeneralGB divisor PinmemberDavidCrow4:14 15 Apr '03  
JokeRe: GB divisor PinmemberDaniel Ribeiro17:34 1 Oct '08  
GeneralAnd a copy of MSDN.... PinmemberBrian Shifrin15:05 7 Apr '03  
GeneralRe: And a copy of MSDN.... PineditorNishant S15:48 7 Apr '03  
GeneralRe: And a copy of MSDN.... PinmemberBrian Shifrin1:07 8 Apr '03  
GeneralRe: And a copy of MSDN.... PineditorNishant S3:18 8 Apr '03  
GeneralAdditions to Work With Win95 OSR1 PinmemberJeremy Davis0:56 7 Apr '03  
GeneralGood but only from Win95 OSR2 onwards PinmemberJeremy Davis0:05 7 Apr '03  
GeneralRe: Good but only from Win95 OSR2 onwards PinmemberDaniel Desormeaux3:24 7 Apr '03  
GeneralRe: Good but only from Win95 OSR2 onwards PinmemberJeremy Davis3:38 7 Apr '03  
GeneralRe: Good but only from Win95 OSR2 onwards PinmemberDaniel Desormeaux5:18 7 Apr '03  
GeneralRe: Good but only from Win95 OSR2 onwards PinmemberJeremy Davis5:28 7 Apr '03  
GeneralRe: Good but only from Win95 OSR2 onwards PinmemberRail Jon Rogut13:00 7 Apr '03  
GeneralRe: Good but only from Win95 OSR2 onwards PinmemberJeremy Davis21:56 7 Apr '03  
GeneralRe: Good but only from Win95 OSR2 onwards PinmemberDaniel Desormeaux8:19 8 Apr '03  
GeneralRe: Good but only from Win95 OSR2 onwards PinmemberJeremy Davis21:56 8 Apr '03  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web04 | 2.5.120517.1 | Last Updated 7 Apr 2003
Article Copyright 2003 by Daniel Ribeiro
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid