#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
{
///
/// <summary>
/// This class provides basic facilities for manipulating files and file paths.
///
/// <h3>File-related methods</h3>
/// There are methods to
/// <list type="bullet">
/// <item>copy a file to another file,</item>
/// <item>compare the content of 2 files,</item>
/// <item>delete files using the wildcard character,</item>
/// <item>etc</item>
/// </list>
/// </summary>
///
public sealed class FileUtils
{
/// ---------------------------------------------------------------
/// <summary>
/// Gets information about the files in a directory and puts it in an array of strings.
/// The file attributes are separated by commas.
/// </summary>
/// <param name="directory"></param>
/// <returns>
/// An string array containing comma separated values of
/// file information in a given directory</returns>
/// <remarks>
/// 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"
/// </remarks>
/// ---------------------------------------------------------------
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;
}
/// ---------------------------------------------------------------
/// <summary>
/// Get an array of files info from a directory.
/// </summary>
/// <param name="directory"></param>
/// <returns></returns>
/// ---------------------------------------------------------------
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();
}
/// ---------------------------------------------------------------
/// <summary>
/// Gets information about the files in a directory and puts it in an array of strings.
/// </summary>
/// <param name="directory">name of directory to search</param>
/// <param name="delimeter">delimeter character to separator file attributes</param>
/// <returns>
/// An string array containing comma separated values of
/// file information in a given directory in the format:
/// <pre>
/// filename,Size,CreationTime,LastAccessTime,LastWriteTime,Attributes
/// </pre>
/// assuming that the delimeter chosen is the comma ',' character.
/// </returns>
/// ---------------------------------------------------------------
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;
}
}
}
|