File Stream C#

#region License and Copyright
/* -------------------------------------------------------------------------
 * Dotnet Commons IO
 *
 *
 * This library is free software; you can redistribute it and/or modify it 
 * under the terms of the GNU Lesser General Public License as published by 
 * the Free Software Foundation; either version 2.1 of the License, or 
 * (at your option) any later version.
 *
 * This library 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 Lesser General Public License 
 * for more details. 
 *
 * You should have received a copy of the GNU Lesser General Public License 
 * along with this library; if not, write to the 
 * 
 * Free Software Foundation, Inc., 
 * 59 Temple Place, 
 * Suite 330, 
 * Boston, 
 * MA 02111-1307 
 * USA 
 * 
 * -------------------------------------------------------------------------
 */
#endregion
using System;
using System.Collections;
using System.Globalization;
using System.IO;
namespace Dotnet.Commons.IO
{
    ///  
    ///   
    /// This class provides basic facilities for manipulating files and file paths.
    /// 
    /// 

File-related methods


    /// There are methods to 
    /// 
    ///     copy a file to another file,
    ///     compare the content of 2 files,
    ///     delete files using the wildcard character,
    ///     etc
    /// 
    /// 

    ///     
    public sealed class FileUtils
    {
        /// ---------------------------------------------------------------
        /// 
        /// Gets information about the files in a directory and puts it in an array of strings.
        /// The file attributes are separated by commas. 
        /// 

        /// 
        /// 
        /// An string array containing comma separated values of 
        /// file information in a given directory
    
        /// 
        /// As the comma character is a valid character in a file name, 
        /// the values are encapsulated within a double
        /// quote, eg. "Dotnet.Commons.IO.dll","28672","26/01/2006 2:25:26 AM","27/07/2006 10:18:04 PM","27/07/2006 10:16","Archive"
        /// 

        /// ---------------------------------------------------------------
        public static string[] GetDirectoryFileInfo(string directory)
        {
            return GetDirectoryFileInfo(directory, ',');
        }
        private static string encapsulateInQuote(string value, bool toEncapsulate)
        {
            if (toEncapsulate)
                return string.Format("\"{0}\"", value);
            else
                return value;
        }
        /// ---------------------------------------------------------------
        /// 
        /// Get an array of files info from a directory.
        /// 

        /// 
        /// 
        /// ---------------------------------------------------------------
        public static FileInfo[] GetFilesInDirectory(string directory)
        {
            if ((directory == null) || (directory.Length < 1))
                throw new System.ArgumentException("Directory supplied is either null or empty");
            DirectoryInfo dirInfo = new DirectoryInfo(directory);
            if (!dirInfo.Exists)
                throw new System.ArgumentException("Directory '" + directory + "' does not exist.");
            return dirInfo.GetFiles();
        }
        /// ---------------------------------------------------------------
        /// 
        /// Gets information about the files in a directory and puts it in an array of strings.
        /// 

        /// name of directory to search
        /// delimeter character to separator file attributes
        /// 
        /// An string array containing comma separated values of 
        /// file information in a given directory in the format:
        /// 

        ///     filename,Size,CreationTime,LastAccessTime,LastWriteTime,Attributes 
        /// 

        /// assuming that the delimeter chosen is the comma ',' character.
        /// 
    
        /// ---------------------------------------------------------------
        public static string[] GetDirectoryFileInfo(string directory, char delimeter)
        {
            ArrayList al = new ArrayList();
            al.Add(String.Format("Name{0}Size{0}CreationTime{0}LastAccessTime{0}LastWriteTime{0}Attributes", delimeter));
            bool toEncapsulateInQuote = delimeter == ',';
            FileInfo[] files = GetFilesInDirectory(directory);
            for (int i = 0; i < files.Length; i++)
            {
                System.Text.StringBuilder buffy = new System.Text.StringBuilder();
                buffy.Append(encapsulateInQuote(files[i].Name, toEncapsulateInQuote));
                buffy.Append(delimeter);
                buffy.Append(encapsulateInQuote(files[i].Length.ToString(), toEncapsulateInQuote));
                buffy.Append(delimeter);
                buffy.Append(encapsulateInQuote(files[i].CreationTime.ToString(), toEncapsulateInQuote));
                buffy.Append(delimeter);
                buffy.Append(encapsulateInQuote(files[i].LastAccessTime.ToString(), toEncapsulateInQuote));
                buffy.Append(delimeter);
                buffy.Append(encapsulateInQuote(files[i].LastWriteTime.ToString(), toEncapsulateInQuote));
                buffy.Append(delimeter);
                buffy.Append(encapsulateInQuote(files[i].Attributes.ToString(), toEncapsulateInQuote));
                al.Add(buffy.ToString());
            }
            string[] dInfo = new string[al.Count];
            al.CopyTo(dInfo);
            return dInfo;
        }
    }
}