473,581 Members | 2,285 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Directory size on disk

12 New Member
I wish to find out the total space (on disk) of a given directory \ folder on windows platform.
Does anybody know how to do it ?

Aug 1 '07 #1
17 17009
3,509 Recognized Expert Moderator Specialist
What have you tried so far? Please post the code you have used to solve this and we can assist from there.

Just a tip though, you may want to search CPAN for modules to do what you want. If you go to search.cpan.org and search for "size", you will see an entry for File::Size which will return the size of files and directories.


Aug 1 '07 #2
12 New Member
Hello Jeff,
Thanks for your reply.

I used stat function which returns several parameters regarding a given file path, one of which holds the file size. But unfortunately this value is only the actual size of file, not the space it occupies on the disk. I need "size on disk" value.

I have been trying to use WMI as well, but it doesn't contain any "size" values on directories, just on files (and this is the actual size as well).

One more thing, I am trying to avoid a case of manually drill down into the folder and accumulate all its sub directory's files size (presuming I will be able to find out their "size on disk" values).

Thanks anyway,
Aug 1 '07 #3
3,509 Recognized Expert Moderator Specialist
Ok, have you tried the File::Size module that I mentioned in my last post? Also, for dealing with file size, try the File::Util module as it returns the file size in bytes, which should be size on disk as you need.

It just takes a bit of searching on CPAN. You want to deal with files? Search for "file" or "size" and see what comes up. A brief description of what each module does IS given for your review.


Aug 1 '07 #4
4,059 Recognized Expert Specialist
File::Size is an unauthorized release, which I am not sure what that means, but it may still work OK, I have never tried using it.

Aug 1 '07 #5
4,059 Recognized Expert Specialist
personally, I might do it like this:

Expand|Select|Wrap|Line Numbers
  1. chdir('c:/');
  2. my @dirinfo = qx|dir c:\windows /S|;
  3. print @dirinfo[-2,-1];
and just parse out the size info.

Note: in the qx|| string I had to use a backslash in front of windows: c:\windows. While Windows allows you to use forward or backslashes in directory paths, DOS does not. Forward slashes are option switches in DOS commands.

As far as finding out the actual disk blocks a file is using, versus it's file size, I do not know how to do that. You may have to use a third party application that can figure that out.
Aug 1 '07 #6
12 New Member
Hi Again,

I have got 1 major constraint: I cannot use an external package such as File::size since I cannot demand from the customer I am doing it for to install that package either. Therefore, I am searching for a build-in method for that purpose.

Aug 1 '07 #7
4,059 Recognized Expert Specialist
If this is being written specific for windows, the client is most likely using activestate perl. Activestate perl comes with many Win32 modules in it's standard distribution. You can look into using those modules instead of sticking with regular perl core modules if that is the case. Otherwise, File::Find or your own custom function is the only way to go that I know of, or use the operating system as I showed above if that will work.
Aug 1 '07 #8
4,059 Recognized Expert Specialist
after a little research, the /V switch (verbose mode, a forward slash followed by an upper case V) seems to do what you want, it returns info like this

Expand|Select|Wrap|Line Numbers
  1. Directory of C:\Perl
  2. File Name         Size        Allocated      Modified      Accessed  Attrib
  5. .              <DIR>                      12-06-02 10:01p  12-06-02      D      .
  6. ..             <DIR>                      12-06-02 10:01p  12-06-02      D      ..
  7. SITE           <DIR>                      12-06-02 10:01p  12-06-02      D      site
  8. LIB            <DIR>                      12-06-02 10:01p  12-06-02      D      lib
  9. EG             <DIR>                      12-06-02 10:01p  12-06-02      D      eg
  10. BIN            <DIR>                      12-06-02 10:01p  12-06-02      D      bin
  11. HTML           <DIR>                      12-06-02 10:01p  12-06-02      D      html
  12. POD2HTMI X~~        16,683        32,768  12-06-02 10:02p  05-31-07       A     pod2htmi.x~~
  13. POD2HTMD X~~        34,146        49,152  12-06-02 10:02p  05-31-07       A     pod2htmd.x~~
  14. DOCS           <DIR>                      12-06-02 10:08p  12-06-02      D      Docs
  15. PDK            <DIR>                      12-06-02 10:08p  12-06-02      D      PDK
  16.          2 file(s)         50,829 bytes
  17.          9 dir(s)          81,920 bytes allocated
so you can get the allocated disk space as well as the file size. The /S switch will drill down into all the sub directories so at the very end you get the totas all summed up:

Expand|Select|Wrap|Line Numbers
  1. Total files listed:
  2.      4,739 file(s)     69,754,995 bytes
  3.      2,174 dir(s)     125,861,888 bytes allocated
  4.                          6,290.38 MB free
  5.                         19,459.84 MB total disk space,  67% in use
Aug 1 '07 #9
1,089 Recognized Expert Top Contributor
I have got 1 major constraint: I cannot use an external package such as File::size since I cannot demand from the customer I am doing it for to install that package either. Therefore, I am searching for a build-in method for that purpose.
At the very least then, just look at the source of File::Size in order to determine how they implemented this. File::Find is a core module though, so as Kevin says, you can just roll your own function as well:

Expand|Select|Wrap|Line Numbers
  1. use File::Find;
  3. my $directory = shift || '.';
  5. print dir_size($directory);
  7. sub dir_size {
  8.     my $directory = shift;
  9.     die "Directory expected as parameter" if !-d $directory;
  11.     my $size_total = 0;
  13.     find({follow => 0, wanted => sub {
  14.         $size_total += -s $File::Find::name || 0;
  15.     }}, $directory);
  17.     return $size_total;
  18. }
  20. 1;
  22. __END__
- Miller
Aug 1 '07 #10

Sign in to post your reply or Sign up for a free account.

Similar topics

by: Nate Harel | last post by:
Hi all, I need to write a small script that gives me the size of a particular directory. Is there a command or set of commands that will do this? thanks Nate
by: Joe | last post by:
I am writing a java application that needs to keep track of what percentage of the disk it uses. It has to run on the various flavors of UNIX and Windows. Problem 1: Is there a Java API class that would allow the application to know the total capacity of a particular disk? Problem 2: Is there a Java API class that would allow the...
by: francisl | last post by:
How can we get a full directory size (sum of all his data)? like when we type `du -sh mydir` Because os.path.getsize('mydir') only give the size of the directory physical representation on the disk. Thanks
by: Abe | last post by:
I have a strange Perl problem I don't understand. I've written the following program to scan different disks on a Windows server to look for directory files. Works fine until it gets to 'e:' when I get this warning: Can't stat e:: Unknown file or directory (If I don't have the "use warnings" in the code I get no message.) There are...
by: dchow | last post by:
Our database size is currently 4G and is incrementing at a rate of 45M/day. What is the max size of a SQL database? And what is the size beyond which the server performance will start to go down?
by: Hemant Shah | last post by:
Folks, I need to move HOME directory of an instance to another directory. What is the best way of doing it? Is changing password file enough? or dies DB2 store this info in it's own config? I am running UDB 8.2 on Linux and AIX. Thanks.
by: Von Thep via DotNetMonster.com | last post by:
How can I use WMI with VB.NET to get a remote computers directory size? How can I use a unc_path within WMI? Previously I used FileInfo and DirectoryInfo but this method takes too long because some of the directories are over 30GB's in size. Please help! -- Message posted via http://www.dotnetmonster.com
by: titan.nyquist | last post by:
The WebBrowser control won't load a css file written in the same directory as the program. If I put an absolute path to it, it will load it. Thus, the current directory of the WebBrowser control isn't the current directory of the program. What is the current directory? I don't want to use an absolute path, since its contents are saved to...
by: Koliber (js) | last post by:
sorry for my bad english when I fire up (from my c# code) a standard "file - save as " dialog, and when chosen location is a shered local network directory, where I do have rights to create and modify files, but I do not have rights to delete one, (and do save as with my filename) then this standard windows dialog seem to create...
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main...
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. ...
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then...
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes...
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert...
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in...
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.