FluentPath: a fluent wrapper around System.IO

Posted by Latest Microsoft Blogs on ASP.net Weblogs See other posts from ASP.net Weblogs or by Latest Microsoft Blogs
Published on Wed, 10 Mar 2010 09:19:52 GMT Indexed on 2010/03/11 17:20 UTC
Read the original article Hit count: 693

Filed under:
|
|
|
.NET is now more than eight years old, and some of its APIs got old with more grace than others. System.IO in particular has always been a little awkward. It’s mostly static method calls ( Path.* , Directory.* , etc.) and some stateful classes ( DirectoryInfo Read More......(read more)

© ASP.net Weblogs or respective owner

FluentPath: a fluent wrapper around System.IO

Posted on Dot net Slackers See other posts from Dot net Slackers
Published on Wed, 10 Mar 2010 00:00:00 GMT Indexed on 2010/03/11 5:48 UTC
Read the original article Hit count: 693

Filed under:
.NET is now more than eight years old, and some of its APIs got old with more grace than others. System.IO in particular has always been a little awkward. Its mostly static method calls (Path.*, Directory.*, etc.) and some stateful classes (DirectoryInfo, FileInfo). In these APIs, paths are plain strings. Since .NET v1, lots of good things happened to C#: lambda expressions, extension methods, optional parameters to name just a few. Outside of .NET, other interesting things happened as well. For...

Did you know that DotNetSlackers also publishes .net articles written by top known .net Authors? We already have over 80 articles in several categories including Silverlight. Take a look: here.



Email this Article

© Dot net Slackers or respective owner

FluentPath: a fluent wrapper around System.IO

Posted by Bertrand Le Roy on ASP.net Weblogs See other posts from ASP.net Weblogs or by Bertrand Le Roy
Published on Wed, 10 Mar 2010 09:19:52 GMT Indexed on 2010/03/11 17:20 UTC
Read the original article Hit count: 693

Filed under:
|
|
|

(c) Bertrand Le Roy 2005 .NET is now more than eight years old, and some of its APIs got old with more grace than others. System.IO in particular has always been a little awkward. It’s mostly static method calls (Path.*, Directory.*, etc.) and some stateful classes (DirectoryInfo, FileInfo). In these APIs, paths are plain strings.

Since .NET v1, lots of good things happened to C#: lambda expressions, extension methods, optional parameters to name just a few. Outside of .NET, other interesting things happened as well. For example, you might have heard about this JavaScript library that had some success introducing a fluent API to handle the hierarchical structure of the HTML DOM. You know? jQuery.

Knowing all that, every time I need to use the stuff in System.IO, I cringe. So I thought I’d just build a more modern wrapper around it. I used a fluent API based on an essentially immutable Path type and an enumeration of such path objects. To achieve the fluent style, a healthy dose of lambda expressions is being used to act on the objects.

Without further ado, here’s an example of what you can do with the new API. In that example, I’m using a Media Center extension that wants all video files to be in their own folder. For that, I need a small tool that creates directories for each video file and moves the files in there. Here’s the code for it:

Path.Get(args[0])
    .Select(p =>
        p.Extension == ".avi" ||
        p.Extension == ".m4v" ||
        p.Extension == ".wmv" ||
        p.Extension == ".mp4" ||
        p.Extension == ".dvr-ms" ||
        p.Extension == ".mpg" ||
        p.Extension == ".mkv")
    .CreateDirectory(p => 
        p.Parent
         .Combine(p.FileNameWithoutExtension))
    .Previous()
    .Move(p =>
        p.Parent
         .Combine(p.FileNameWithoutExtension)
         .Combine(p.FileName));

FluentPath1 This code creates a Path object pointing at the path pointed to by the first command line argument of my executable. It then selects all video files. After that, it creates directories that have the same names as each of the files, but without their extension. The result of that operation is the set of created directories. We can now get back to the previous set using the Previous method, and finally we can move each of the files in the set to the corresponding freshly created directory, whose name is the combination of the parent directory and the filename without extension.

The new fluent path library covers a fair part of what’s in System.IO in a single, convenient API. Check it out, I hope you’ll enjoy it. Suggestions are more than welcome. For example, should I make this its own project on CodePlex or is this informal style just OK? Anything missing that you’d like to see? Is there a specific example you’d like to see expressed with the new API? Bugs?

The code can be downloaded from here (this is under a new BSD license):
http://weblogs.asp.net/blogs/bleroy/Samples/FluentPath.zip

© ASP.net Weblogs or respective owner

Related posts about ASP.NET

Related posts about .NET