// 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 <http://www.gnu.org/licenses/>.
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.CodeDom.Compiler;
using System.Text.RegularExpressions;
namespace crudwork.Utilities
{
/// <summary>
/// File Utility
/// </summary>
public static class FileUtil
{
#region Enums
/// <summary>
/// File order type for sorting list of filenames
/// </summary>
public enum FileOrderType
{
/// <summary>
/// No sort
/// </summary>
None = 0,
/// <summary>
/// Sort by filename
/// </summary>
Filename = 1,
/// <summary>
/// Sort by extension
/// </summary>
Extension = 2,
/// <summary>
/// Sort by the size
/// </summary>
Size = 3,
/// <summary>
/// Sort by last modified timestamp
/// </summary>
LastWriteTime = 4,
/// <summary>
/// Sort by file creation timestamp
/// </summary>
CreationDate = 5,
}
#endregion
#region GetFiles / GetFolders methods
/// <summary>
/// Shorten the folder name
/// </summary>
/// <param name="fileList"></param>
/// <param name="path"></param>
/// <returns></returns>
public static string[] MakeRelativePath(string[] fileList, string path)
{
List<String> results = new List<string>();
for (int i = 0; i < fileList.Length; i++)
{
string file = fileList[i];
results.Add(file.Replace(path + "\\", ""));
}
return results.ToArray();
}
/// <summary>
/// sort the file list based on the given order type
/// </summary>
/// <param name="fileList"></param>
/// <param name="fileOrderType"></param>
/// <returns></returns>
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
}
}
|