Recursive Directory Listing

okibi spam at ratedo.com
Thu Feb 14 03:38:04 PST 2008


Tim Burrell Wrote:

> okibi wrote:
> > Hello,
> > 
> > I was wondering if anyone could tell me how I would go about doing this. I need a function that can list all the files and directories in a given directory, and return an array that I can use that can reference each file, each folder, and each file within each subfolder. Is this possible?
> > 
> > Thanks!
> 
> tango.io.FileScan :).
> 
> If you're using Phobos, a recursive file scanner is pretty much the
> easiest thing you can write!
> 
> Pseudo code:
> 
> scan(char [] Path, ref char [][] Paths) {
> 	Paths ~= Path
> 
> 	if (!Path.isDirectory)
> 		return
> 
> 	ListOfPaths = getContentsOfDir(Path)
> 	foreach (Item; ListOfPaths)
> 		scan(Path)
> }
> 
> Obviously you can get more creative and store an array of structures
> which contain file system information such as whether or not the path is
> a file or a directory, etc, but that's the basic idea.
> 
> Even if you're not using Tango, you can always look at the source code
> to see how they are doing it:
> http://dsource.org/projects/tango/docs/current/source/tango.io.FileScan.html
> 
> Hope this helps!

Actually, I was wondering if D had a function (or function within Phobos) that allowed recursive directory scanning. Anyways, here's what I wrote:

void dirList(char[] path)
{
	if (!isdir(path))
		writefln("File: ", path);
	else
	{
		writefln("Directory: ", path);
		char[][] pathsList = listdir(path);
		char[][] dirs;
		char[][] files;
		foreach (item; pathsList)
		{
			if (isdir(path~"/"~item))
				dirs ~= path~"/"~item;
			else
				files ~= path~"/"~item;
		}
		foreach (file; files)
			writefln("File: ", file);
		foreach (dir; dirs)
			dirList(dir);
	}
}

Can this be optimized at all?

Thanks!


More information about the Digitalmars-d-learn mailing list