[Mono-list] Pattern Matching to Find Files

Abe Gillespie abe.gillespie at gmail.com
Thu Jan 5 17:03:08 EST 2006


Thanks for the help Jon.  Unfortunately I *do* need a cross platform
solution.  Any other ideas?

Thanks.
-Abe

On 1/3/06, Jonathan Pryor <jonpryor at vt.edu> wrote:
> On Tue, 2006-01-03 at 17:06 -0500, Abe Gillespie wrote:
> > I'd like to use Directory.GetFiles() to get all the files that don't
> > HAVE an extension.  Is there a pattern I can send into GetFiles()
> > that'll do the trick?  ... I guess the pattern needs to match when
> > there is NO dot.
>
> You could use Mono.Unix.UnixDirectoryInfo.GetFileSystemEntries() (in
> Mono.Posix.dll) which takes a regular expression:
>
>         using Mono.Unix;
>
>         UnixFileSystemInfo[] dirents =
>           new UnixDirectoryInfo ("dir").GetFileSystemEntries ("^[^.]+$");
>
> The downside is this returns files, directories, symbolic links,
> sockets...  Everything within the directory.  If you want to narrow this
> down to files, you'll need additional work:
>
>         private static UnixFileInfo GetFile (UnixFileSystemInfo f)
>         {
>           if (f.IsSymbolicLink) {
>             UnixSymbolicLinkInfo s = (UnixSymbolicLinkInfo) f;
>             if (s.Contents.IsRegularFile)
>               return (UnixFileInfo) s.Contents;
>             return null;
>           }
>           if (f.IsRegularFile)
>             return (UnixFileInfo) f;
>           return null;
>         }
>
>         public static UnixFileInfo[] GetFiles (string dir)
>         {
>           UnixFileSystemInfo[] dirents =
>             new UnixDirectoryInfo (dir).GetFileSystemEntries
>         ("^[^.]+$");
>           int num_files = 0;
>           foreach (UnixFileSystemInfo d in dirents) {
>             if (GetFile (d) != null)
>               ++num_files;
>           }
>           UnixFileInfo[] files = new UnixFileInfo[num_files];
>           num_files = 0;
>           foreach (UnixFileSystemInfo d in dirents) {
>             UnixFileInfo f = GetFile (d);
>             if (f != null) {
>               files [num_files++] = f;
>             }
>           }
>           return files;
>         }
>
> It goes without saying that this is specific to Unix platforms.
>
>  - Jon
>
>
>


More information about the Mono-list mailing list