digitalmars.D.learn - How to use tango's FileScan correctly?
- qwesx <qwesx qwesx.com> Oct 14 2010
- Moritz Warning <moritzwarning web.de> Oct 14 2010
- Moritz Warning <moritzwarning web.de> Oct 14 2010
- Moritz Warning <moritzwarning web.de> Oct 14 2010
- qwesx <qwesx qwesx.com> Oct 14 2010
Hello!
I'm trying out some things in D (with tango) and tried to build a *very*
primitive indexing program. One function requires to run through a
directory (without recursion) and get me all the files/folders in there.
So after reading the documentation I found that tango.io.FileScan
basically does what I need. It's just that I can't get it to work. All
examples there use some filter, but I don't need one. And the other stuff
I tried (and which compiled) gives me either a wrong number of files in
my debug output, or none at all.
Here's (part of) my code:
FileScan scan = new FileScan();
// only one of those was used at a time, the others are commented
// dir is a char[] with an existing (absolute) directory:
scan(dir, "*");
scan(dir, ".*");
scan(dir, "*.*");
scan(dir, "");
scan = scan.sweep(dir, false);
FilePath[] myFolders = scan.folders();
FilePath[] myFiles = scan.files();
char[][] err = scan.errors();
Stdout("found folders: ")(myFolders.length)("\n")();
Stdout("found files : ")(myFiles.length)("\n")();
Stdout("errors:\n")();
foreach (char[] e; err)
Stdout(e)("\n")();
The result was always:
found folders: 0
found files : 0
errors:
% _
I think I'm doing something very wrong here. And it's possibly because I
don't understand the documentation.
Can you help me get this to work?
Regards
qwesx
Oct 14 2010
I suspect there is a bug.
You could use FilePath.toList() as an alternative for now.
foreach(path; FilePath(".").toList())
{
if(path.isFolder)
folder_counter++;
else
file_counter++;
}
On Thu, 14 Oct 2010 15:31:47 +0000, qwesx wrote:
Hello!
I'm trying out some things in D (with tango) and tried to build a *very*
primitive indexing program. One function requires to run through a
directory (without recursion) and get me all the files/folders in there.
So after reading the documentation I found that tango.io.FileScan
basically does what I need. It's just that I can't get it to work. All
examples there use some filter, but I don't need one. And the other
stuff I tried (and which compiled) gives me either a wrong number of
files in my debug output, or none at all.
Here's (part of) my code:
FileScan scan = new FileScan();
// only one of those was used at a time, the others are commented // dir
is a char[] with an existing (absolute) directory: scan(dir, "*");
scan(dir, ".*");
scan(dir, "*.*");
scan(dir, "");
scan = scan.sweep(dir, false);
FilePath[] myFolders = scan.folders(); FilePath[] myFiles =
scan.files();
char[][] err = scan.errors();
Stdout("found folders: ")(myFolders.length)("\n")(); Stdout("found files
: ")(myFiles.length)("\n")(); Stdout("errors:\n")();
foreach (char[] e; err)
Stdout(e)("\n")();
The result was always:
found folders: 0
found files : 0
errors:
% _
I think I'm doing something very wrong here. And it's possibly because I
don't understand the documentation.
Can you help me get this to work?
Regards
qwesx
Oct 14 2010
Here is the bug report (patch proposal included): http://dsource.org/projects/tango/ticket/2003 On Thu, 14 Oct 2010 15:31:47 +0000, qwesx wrote:Hello! I'm trying out some things in D (with tango) and tried to build a *very* primitive indexing program. One function requires to run through a directory (without recursion) and get me all the files/folders in there. So after reading the documentation I found that tango.io.FileScan basically does what I need. It's just that I can't get it to work. All examples there use some filter, but I don't need one. And the other stuff I tried (and which compiled) gives me either a wrong number of files in my debug output, or none at all. Here's (part of) my code: FileScan scan = new FileScan(); // only one of those was used at a time, the others are commented // dir is a char[] with an existing (absolute) directory: scan(dir, "*"); scan(dir, ".*"); scan(dir, "*.*"); scan(dir, ""); scan = scan.sweep(dir, false); FilePath[] myFolders = scan.folders(); FilePath[] myFiles = scan.files(); char[][] err = scan.errors(); Stdout("found folders: ")(myFolders.length)("\n")(); Stdout("found files : ")(myFiles.length)("\n")(); Stdout("errors:\n")(); foreach (char[] e; err) Stdout(e)("\n")(); The result was always: found folders: 0 found files : 0 errors: % _ I think I'm doing something very wrong here. And it's possibly because I don't understand the documentation. Can you help me get this to work? Regards qwesx
Oct 14 2010
Ok, as I've found out, FileScan is only for locating a set of files. the preferred way is to use the virtual file system (VFS): http://dsource.org/projects/tango/wiki/ChapterVFS Examples: http://www.dsource.org/projects/tango/wiki/VfsZipAndLinesExample http://dsource.org/projects/tango/browser/trunk/doc/example/vfs/vfscan.d http://dsource.org/projects/tango/browser/trunk/doc/example/vfs But I think FilePath.toList() is enough for your plans. On Thu, 14 Oct 2010 15:31:47 +0000, qwesx wrote:Hello! I'm trying out some things in D (with tango) and tried to build a *very* primitive indexing program. One function requires to run through a directory (without recursion) and get me all the files/folders in there. So after reading the documentation I found that tango.io.FileScan basically does what I need. It's just that I can't get it to work. All examples there use some filter, but I don't need one. And the other stuff I tried (and which compiled) gives me either a wrong number of files in my debug output, or none at all. Here's (part of) my code: FileScan scan = new FileScan(); // only one of those was used at a time, the others are commented // dir is a char[] with an existing (absolute) directory: scan(dir, "*"); scan(dir, ".*"); scan(dir, "*.*"); scan(dir, ""); scan = scan.sweep(dir, false); FilePath[] myFolders = scan.folders(); FilePath[] myFiles = scan.files(); char[][] err = scan.errors(); Stdout("found folders: ")(myFolders.length)("\n")(); Stdout("found files : ")(myFiles.length)("\n")(); Stdout("errors:\n")(); foreach (char[] e; err) Stdout(e)("\n")(); The result was always: found folders: 0 found files : 0 errors: % _ I think I'm doing something very wrong here. And it's possibly because I don't understand the documentation. Can you help me get this to work? Regards qwesx
Oct 14 2010
On Thu, 14 Oct 2010 18:07:20 +0000, Moritz Warning wrote:Ok, as I've found out, FileScan is only for locating a set of files. the preferred way is to use the virtual file system (VFS): http://dsource.org/projects/tango/wiki/ChapterVFS Examples: http://www.dsource.org/projects/tango/wiki/VfsZipAndLinesExample http://dsource.org/projects/tango/browser/trunk/doc/example/vfs/vfscan.d http://dsource.org/projects/tango/browser/trunk/doc/example/vfs But I think FilePath.toList() is enough for your plans.
I'll take a look at it. Thank all three of you, I got it working with toList() :-) Regards qwesx
Oct 14 2010









Moritz Warning <moritzwarning web.de> 