[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