using System.IO.Abstractions;
using System.IO.Abstractions.TestingHelpers;
using System.Collections.Generic;
public static void Main()
IFileSystem fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
{ @"c:\myfile.txt", new MockFileData("Testing is meh.") },
{ @"c:\demo\jQuery.js", new MockFileData("some js") },
{ @"c:\demo\image.gif", new MockFileData(new byte[] { 0x12, 0x34, 0x56, 0xd2 }) }
var browser = new FileBrowser(fileSystem);
public interface IFileBrowser
IDiskItem ToDiskItem(string path);
public class FileBrowser : IFileBrowser
public FileBrowser() : this(new FileSystem())
public FileBrowser(IFileSystem fileSystem)
this.fileSystem = fileSystem;
public IDiskItem ToDiskItem(string path)
DiskItem diskItem = new DiskItem(fileSystem, fileSystem.Path.GetFileName(path), path, ItemType.Directory);
public interface IDiskItem
ItemType DiskItemType{get;}
List<IDiskItem> GetDiskItemList();
public class DiskItem : IDiskItem
public string Name{get; private set;}
public string Path {get; private set;}
public ItemType DiskItemType{get; private set;}
private IFileSystem fileSystem;
public DiskItem(string name, string path, ItemType diskItemType) : this(new FileSystem(), name, path, diskItemType)
public DiskItem(IFileSystem fileSystem, string name, string path, ItemType diskItemType)
this.DiskItemType = diskItemType;
this.fileSystem = fileSystem;
public List<IDiskItem> GetDiskItemList()
string[] pathToAllDirectories = fileSystem.Directory.GetDirectories(Path);
string[] pathToAllFiles = fileSystem.Directory.GetFiles(Path);
List<IDiskItem> listResult = new List<IDiskItem>();
foreach(string dir in pathToAllDirectories)
listResult.Add(new DiskItem(fileSystem, fileSystem.Path.GetFileName(Path), Path, ItemType.Directory));
foreach(string f in pathToAllFiles)
listResult.Add(new DiskItem(fileSystem, fileSystem.Path.GetFileName(Path), Path, ItemType.File));
public enum ItemType{Directory, File}