File Stream C#

// crudwork
// Copyright 2004 by Steve T. Pham (http://www.crudwork.com)
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with This program.  If not, see .
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.CodeDom.Compiler;
using System.Text.RegularExpressions;
namespace crudwork.Utilities
{
  /// 
  /// File Utility
  /// 

  public static class FileUtil
  {
    #region Enums
    /// 
    /// File order type for sorting list of filenames
    /// 

    public enum FileOrderType
    {
      /// 
      /// No sort
      /// 

      None = 0,
      /// 
      /// Sort by filename
      /// 

      Filename = 1,
      /// 
      /// Sort by extension
      /// 

      Extension = 2,
      /// 
      /// Sort by the size
      /// 

      Size = 3,
      /// 
      /// Sort by last modified timestamp
      /// 

      LastWriteTime = 4,
      /// 
      /// Sort by file creation timestamp
      /// 

      CreationDate = 5,
    }
    #endregion
    #region GetFiles / GetFolders methods
    /// 
    /// Shorten the folder name
    /// 

    /// 
    /// 
    /// 
    public static string[] MakeRelativePath(string[] fileList, string path)
    {
      List results = new List();
      for (int i = 0; i < fileList.Length; i++)
      {
        string file = fileList[i];
        results.Add(file.Replace(path + "\\", ""));
      }
      return results.ToArray();
    }
    /// 
    /// sort the file list based on the given order type
    /// 

    /// 
    /// 
    /// 
    public static string[] OrderFileBy(string[] fileList, FileOrderType fileOrderType)
    {
      string[] orderKey = new string[fileList.Length];
      string[] orderVal = new string[fileList.Length];
      //int maskLength = StringUtil.MaxLength(fileList);
      int maskLength = 100;
      string maskFormat = String.Format(@"{{0,{0}}}", maskLength);
      for (int i = 0; i < fileList.Length; i++)
      {
        string filename = fileList[i];
        string orderByKey;
        if (!File.Exists(filename))
          throw new FileNotFoundException(filename);
        FileInfo fi = new FileInfo(filename);
        switch (fileOrderType)
        {
          case FileOrderType.None:
            orderByKey = "";
            break;
          case FileOrderType.Filename:
            {
              orderByKey = String.Format(maskFormat, fi.Name);
            }
            break;
          case FileOrderType.LastWriteTime:
            {
              DateTime dt = fi.LastWriteTime;
              orderByKey = String.Format("{0:0000}{1:00}{2:00}{3:00}{4:00}{5:00}{6:000}",
                dt.Year,
                dt.Month,
                dt.Day,
                dt.Hour,
                dt.Minute,
                dt.Second,
                dt.Millisecond
                );
            }
            break;
          default:
            throw new ArgumentOutOfRangeException("not supported: " + fileOrderType);
        }
        orderKey[i] = orderByKey;
        orderVal[i] = fileList[i];
      }
      if (fileOrderType != FileOrderType.None)
      {
        Array.Sort(orderKey, orderVal);
      }
      return orderVal;
    }
    #endregion
   }
}