[erlang-questions] Best way to check if a given directory is empty (or not)?

Richard Carlsson carlsson.richard@REDACTED
Tue Mar 13 09:51:30 CET 2012


On 03/13/2012 07:09 AM, Zabrane Mickael wrote:
> Hi guys,
>
> I'd like to know if there's a good and portable method to check if a directory is empty (or not)?
> In my case, the directory can contains huge number (more than 150K in average) of files if it is not empty.
>
> I've tested the following working calls:
> a. file:list_dir/1
> b. filelib:wildcard/2
>
> The problem with them is they both return a list of filenames.
> I'd like to avoid getting this list back to be able to check if it's empty or not.

I don't think it can be done. E.g., looking at the POSIX interface 
towards directories, a directory is treated as a sequence of names and 
corresponding inode numbers. There is no function for getting the number 
of entries of a directory, and I assume that in many file systems the 
directory size is simply never stored explicitly. The only portable 
method is to get the list of entries and count them yourself, i.e., 
using file:list_dir/1.

In my experience, file systems may _handle_ 100K+ files in directories, 
and opening individual files may work fine when you know their exact 
names, but reading the whole directory list can be slow, and if you need 
to traverse all the inodes to check time stamps or similar, you might as 
well go for lunch.

    /Richard



More information about the erlang-questions mailing list