Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions

size of directory

Posted on 1998-12-04
Last Modified: 2010-04-15
How to find out the size of a directory (i.e.) all its files and subdirectories.
Thank you.
Question by:birenkd

Author Comment

ID: 1254839
Its very urgent
LVL 51

Expert Comment

ID: 1254840
df .

Expert Comment

ID: 1254841

are you looking for an environment-specific answer, or a general purpose C code answer?

if you're in a unix environment, then the "df" command will do it for you...

if you're in a dos environment, you could play around with the "dir/s" command; i believe that its last line of output will tell you the total size of all the files it found.

Or, are you looking for an algorithm or code in C which will traverse a directory tree and note the sum of the sizes of all files found?

Salesforce Made Easy to Use

On-screen guidance at the moment of need enables you & your employees to focus on the core, you can now boost your adoption rates swiftly and simply with one easy tool.


Accepted Solution

Answers2000 earned 100 total points
ID: 1254842
Assuming you mean under 95/98/NT

use FindFirstFile/FindNextFile/FindClose to iterate thru the files in a directory. This will tell you all the subdirectories as well (including . and .. subdirectories which you should ignore).  Remember FindFirstFile takes a wild card path therefore add "*.*" to the search path

For each item you get back a WIN32_FIND_DATA structure.  Which contains the size of file.  You can add this up to give total size of files.  If you meet a subdirectory, then recurse into the function to add up the total for a subdirectory, i.e.

void DirectoryTotal( const char * szDirectory, int * pTotal )
/* iterate thru files using using FindFirstFile etc. */
/* if a file, add to the total (*pTotal) += size */
/* if a directory and not "." or ".." then make a temporary variable with szDirectory strcat with the subdirectory name and call DirectoryTotal with sub directory name and pTotal */

all the funtion :-

int ntotal
DirectoryTotal( "C:\", &ntotal ) ;
printf( "total files=%d bytes", ntotal ) ;

On other operating systems there is usually a compiler/OS specific function to do directory search, in <direct.h>


Expert Comment

ID: 1254843
char szCleanDir[MAX_PATH+10] ;
char szSearchPath[MAX_PATH+5] ;
int ll ;

/* Make sure dir has final slash */
strcpy( szCleanDir, szDirectory ) ;
ll = strlen(szCleanDir) ;
assert( ll > 0 ) ;
if ( szCleanDir[ll-1] != '\\' )
strcat( szCleanDir, "\\" ) ;

/* Generate search path */
strcpy( szSearchPath, szCleanDir ) ;
strcat( szSearchPath, "*.*" ) ;

/* Do search */
hh = FindFirstFile( szSearchPath, &fd ) ;
while ( ( hh != NULL ) && ( bOK ) )
if ( ( fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) != 0 )
/* it's a directory */
char szSubDirectory[MAX_PATH+10] ;
if ( strcmp( (char *)fd.cFileName, "." ) == 0 ) continue ;
if ( strcmp( (char *)fd.cFileName, ".." ) == 0 ) continue ;
strcpy( szSubDirectory, szCleanDir ) ;
strcat( szSubDirectory, (char *)fd.cFileName ) ;
DirectoryTotal( szSubDirectory, pTotal ) ;
} else
/* it's a file */
(*pTotal) += fd.nFileSizeLow ;

bOK = FindNextFile( hh, &fd ) ;

} /* while* /

if ( hh != NULL ) FindClose(hh) ;



Expert Comment

ID: 1254844
The above code goes inside the DirectoryTotal function, basically implementing the Win32 Algorithm.

Couple of points
1. File Sizes can exceed that of an int, (64 bit number).  Therefore if you want to take this into account change type of pTotal and modify "it's a file" section

2. Sorry if any typos, but hopefully you get the point

Featured Post

Best Practices: Disaster Recovery Testing

Besides backup, any IT division should have a disaster recovery plan. You will find a few tips below relating to the development of such a plan and to what issues one should pay special attention in the course of backup planning.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
port mapped I/o query 10 206
Problem with MFCApp 78 420
TCP/IP Socket - connection close results in data lost 14 140
Display a Float Variable in C without using the function printf. 2 25
This tutorial is posted by Aaron Wojnowski, administrator at SDKExpert.net.  To view more iPhone tutorials, visit www.sdkexpert.net. This is a very simple tutorial on finding the user's current location easily. In this tutorial, you will learn ho…
This is a short and sweet, but (hopefully) to the point article. There seems to be some fundamental misunderstanding about the function prototype for the "main" function in C and C++, more specifically what type this function should return. I see so…
The goal of this video is to provide viewers with basic examples to understand recursion in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use switch statements in the C programming language.

839 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question