using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace Ella.ToolKit { /// <summary> /// 文件操作 /// <para/>Author : AnDequan /// <para/>Date : 2010-12-23 /// </summary> public sealed class FileHelper : Singleton<FileHelper> { /// <summary> /// 文件列表 /// </summary> List<string> lstFiles; /// <summary> /// 文件操作对象 /// </summary> FileInfo fFile; /// <summary> /// 文件夹列表 /// </summary> List<string> folders; /// <summary> /// 文件夹内文件大小 /// </summary> long lFolderSize; /// <summary> /// 创建文件 /// <para/>Author : AnDequan /// <para/>Date : 2010-12-23 /// </summary> /// <param name="path">创建文件的路径(不含文件名)</param> /// <param name="content">文件的内容</param> /// <param name="filename">文件名称</param> public bool CreateNewFile(string path, string content, string filename) { bool bIsSuccess; try { if (!File.Exists(path)) Directory.CreateDirectory(path); if (File.Exists(path + "//" + filename)) File.Delete(path + "//" + filename); using (FileStream fsNew = new FileStream(path + "//" + filename, FileMode.Create)) { using (StreamWriter swNew = new StreamWriter(fsNew)) { swNew.WriteLine(content); } } bIsSuccess = true; } catch (Exception ex) { bIsSuccess = false; LogHelper.Instance.Add(ex); } return bIsSuccess; } /// <summary> /// 取得指定文件夹下的所有文件 /// <para/>Author : AnDequan /// <para/>Date : 2010-12-29 /// </summary> /// <param name="folderPath">文件夹路径</param> /// <returns>文件列表</returns> public List<string> GetFiles(string folderPath) { lstFiles = new List<string>(); try { GetAllFilePath(folderPath); } catch (Exception ex) { LogHelper.Instance.Add(ex); } return lstFiles; } /// <summary> /// 取得指定文件夹下的所有子文件夹 /// <para/>Author : AnDequan /// <para/>Date : 2010-12-29 /// </summary> /// <param name="folderPath">文件夹路径</param> /// <returns>文件夹列表</returns> public List<string> GetFolders(string folderPath) { folders = new List<string>(); try { GetAllFolders(folderPath); } catch (Exception ex) { LogHelper.Instance.Add(ex); } return folders; } /// <summary> /// 取得文件夹的大小 /// <para/>Author : AnDequan /// <para/>Date : 2010-12-29 /// </summary> /// <param name="folderPath">文件夹路径</param> /// <returns>文件夹大小</returns> public long GetFolderSize(string folderPath) { lFolderSize = 0; try { GetFolderSizes(folderPath); } catch (Exception ex) { LogHelper.Instance.Add(ex); } return lFolderSize; } /// <summary> /// 取得文件相关信息 /// <para/>Author : AnDequan /// <para/>Date : 2010-10-26 /// </summary> /// <param name="filePath">文件路径</param> /// <param name="fileName">文件名称</param> /// <param name="fileSize">文件大小</param> /// <param name="fileType">文件类型</param> public void GetFileInfo(string filePath, out string fileName, out long fileSize, out string fileType) { fileName = string.Empty; fileSize = 0; fileType = string.Empty; try { //[ 判断给定的文件路径是否为空 ] if (null != filePath && filePath.Trim().Length > 0) { //[ 不为空,继续取得相关信息 ] //[ 去掉文件路径两边的空格 ] filePath = filePath.Trim(); //[ 取得一个文件操作实例对象 ] FileInfo fileInfo = new FileInfo(filePath); //[ 取得文件名称 ] fileName = fileInfo.Name; //[ 取得文件大小 ] fileSize = fileInfo.Length / 1024 + 1; //[ 取得路径中最后一个点的位置 ] int iIndexPoint = filePath.LastIndexOf('.'); //[ 取得文件类型 ] fileType = filePath.Substring(iIndexPoint); } } catch (Exception ex) { LogHelper.Instance.Add(ex); } } /// <summary> /// 为文件加密 /// <para/>Author : AnDequan /// <para/>Date : 2011-1-5 /// </summary> /// <param name="filePath">文件路径(包含文件名)</param> /// <returns>true - 成功,false - 失败</returns> public bool EncryptFile(string filePath) { bool bIsSuccess = false; try { if (File.Exists(filePath)) { string enStr = string.Empty; using (StreamReader sr = new StreamReader(filePath)) { enStr = EncryptHelper.Instance.Encrypt(sr.ReadToEnd()); } using (FileStream fs = new FileStream(filePath, FileMode.Create)) { using (StreamWriter swNew = new StreamWriter(fs)) { swNew.WriteLine(enStr); bIsSuccess = true; } } } } catch (Exception ex) { bIsSuccess = false; LogHelper.Instance.Add(ex); } return bIsSuccess; } #region User - Defined Private Function /// <summary> /// 计算文件夹的大小 /// <para/>Author : AnDequan /// <para/>Date : 2010-11-15 /// </summary> /// <param name="path">文件夹路径</param> private void GetFolderSizes(string path) { try { string[] sDirs = Directory.GetDirectories(path); string[] sFiles = Directory.GetFiles(path); foreach (string FileItem in sFiles) { fFile = new FileInfo(FileItem); lFolderSize += fFile.Length; } foreach (string item in sDirs) { GetFolderSizes(item); } } catch (Exception ex) { LogHelper.Instance.Add(ex); } } /// <summary> /// 取得当前文件夹下的所有文件 /// <para/>Author : AnDequan /// <para/>Date : 2010-12-29 /// </summary> /// <param name="folderPath">文件夹路径</param> private void GetAllFilePath(string folderPath) { try { string[] sDirs = Directory.GetDirectories(folderPath); string[] sFiles = Directory.GetFiles(folderPath); foreach (string FileItem in sFiles) { fFile = new FileInfo(FileItem); lstFiles.Add(FileItem); } foreach (string DirItem in sDirs) { GetAllFilePath(DirItem); } } catch (Exception ex) { LogHelper.Instance.Add(ex); } } /// <summary> /// 取得当前文件夹下的所有文件 /// <para/>Author : AnDequan /// <para/>Date : 2010-12-29 /// </summary> /// <param name="folderPath">文件夹路径</param> private void GetAllFolders(string folderPath) { try { string[] sDirs = Directory.GetDirectories(folderPath); string[] sFiles = Directory.GetFiles(folderPath); foreach (string FileItem in sDirs) { fFile = new FileInfo(FileItem); folders.Add(FileItem); } foreach (string DirItem in sDirs) { GetAllFolders(DirItem); } } catch (Exception ex) { LogHelper.Instance.Add(ex); } } #endregion } }