Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
October 14, 2010 How to use tango's FileScan correctly? | ||||
---|---|---|---|---|
| ||||
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 |
October 14, 2010 Re: How to use tango's FileScan correctly? | ||||
---|---|---|---|---|
| ||||
Posted in reply to qwesx | 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
|
October 14, 2010 Re: How to use tango's FileScan correctly? | ||||
---|---|---|---|---|
| ||||
Posted in reply to qwesx | 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 |
October 14, 2010 Re: How to use tango's FileScan correctly? | ||||
---|---|---|---|---|
| ||||
Posted in reply to qwesx | 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 |
October 14, 2010 Re: How to use tango's FileScan correctly? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Moritz Warning | 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
|
Copyright © 1999-2021 by the D Language Foundation