using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEAWCS_Core.Helper { public class FileHelper : IDisposable { private bool _alreadyDispose = false; #region æž„é€ å‡½æ•° public FileHelper() { } ~FileHelper() { Dispose(); ; } protected virtual void Dispose(bool isDisposing) { if (_alreadyDispose) return; _alreadyDispose = true; } #endregion #region IDisposable æˆå‘˜ public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } #endregion #region å–得文件åŽç¼€å /**************************************** * 函数å称:GetPostfixStr * 功能说明:å–得文件åŽç¼€å * å‚ æ•°ï¼šfilename:文件åç§° * 调用示列: * string filename = "aaa.aspx"; * string s = EC.FileObj.GetPostfixStr(filename); *****************************************/ /// <summary> /// å–åŽç¼€å /// </summary> /// <param name="filename">文件å</param> /// <returns>.gif|.htmlæ ¼å¼</returns> public static string GetPostfixStr(string filename) { int start = filename.LastIndexOf("."); int length = filename.Length; string postfix = filename.Substring(start, length - start); return postfix; } #endregion #region æ ¹æ®æ–‡ä»¶å¤§å°èŽ·å–æŒ‡å®šå‰ç¼€çš„å¯ç”¨æ–‡ä»¶å /// <summary> /// æ ¹æ®æ–‡ä»¶å¤§å°èŽ·å–æŒ‡å®šå‰ç¼€çš„å¯ç”¨æ–‡ä»¶å /// </summary> /// <param name="folderPath">文件夹</param> /// <param name="prefix">文件å‰ç¼€</param> /// <param name="size">文件大å°(1m)</param> /// <param name="ext">文件åŽç¼€(.log)</param> /// <returns>å¯ç”¨æ–‡ä»¶å</returns> public static string GetAvailableFileWithPrefixOrderSize(string folderPath, string prefix, int size = 1 * 1024 * 1024, string ext = ".log") { var allFiles = new DirectoryInfo(folderPath); var selectFiles = allFiles.GetFiles().Where(fi => fi.Name.ToLower().Contains(prefix.ToLower()) && fi.Extension.ToLower() == ext.ToLower() && fi.Length < size).OrderByDescending(d => d.Name).ToList(); if (selectFiles.Count > 0) { return selectFiles.FirstOrDefault().FullName; } return Path.Combine(folderPath, $@"{prefix}_{DateTime.Now.DateToTimeStamp()}.log"); } public static string GetAvailableFileNameWithPrefixOrderSize(string _contentRoot, string prefix, int size = 1 * 1024 * 1024, string ext = ".log") { var folderPath = Path.Combine(_contentRoot, "Log"); if (!Directory.Exists(folderPath)) { Directory.CreateDirectory(folderPath); } var allFiles = new DirectoryInfo(folderPath); var selectFiles = allFiles.GetFiles().Where(fi => fi.Name.ToLower().Contains(prefix.ToLower()) && fi.Extension.ToLower() == ext.ToLower() && fi.Length < size).OrderByDescending(d => d.Name).ToList(); if (selectFiles.Count > 0) { return selectFiles.FirstOrDefault().Name.Replace(".log", ""); } return $@"{prefix}_{DateTime.Now.DateToTimeStamp()}"; } #endregion #region 写文件 /**************************************** * 函数å称:WriteFile * 功能说明:写文件,会覆盖掉以å‰çš„内容 * å‚ æ•°ï¼šPath:文件路径,Strings:文本内容 * 调用示列: * string Path = Server.MapPath("Default2.aspx"); * string Strings = "这是我写的内容啊"; * EC.FileObj.WriteFile(Path,Strings); *****************************************/ /// <summary> /// 写文件 /// </summary> /// <param name="Path">文件路径</param> /// <param name="Strings">文件内容</param> public static void WriteFile(string Path, string Strings) { if (!File.Exists(Path)) { FileStream f = File.Create(Path); f.Close(); } StreamWriter f2 = new StreamWriter(Path, false, System.Text.Encoding.UTF8); f2.Write(Strings); f2.Close(); f2.Dispose(); } /// <summary> /// 写文件 /// </summary> /// <param name="Path">文件路径</param> /// <param name="Strings">文件内容</param> public static void WriteFileAndDelOldFile(string Path, string Strings) { if (!File.Exists(Path)) { FileStream f = File.Create(Path); f.Close(); } else { File.Delete(Path); } StreamWriter f2 = new StreamWriter(Path, false, System.Text.Encoding.UTF8); f2.Write(Strings); f2.Close(); f2.Dispose(); } /// <summary> /// 写文件 /// </summary> /// <param name="Path">文件路径</param> /// <param name="Strings">文件内容</param> public static void WriteFile(string Path, byte[] buf) { if (!File.Exists(Path)) { FileStream f = File.Create(Path); f.Close(); } FileStream f2 = new FileStream(Path, FileMode.Create, FileAccess.Write); f2.Write(buf, 0, buf.Length); f2.Close(); f2.Dispose(); } public static void WriteFile(string Path, string fileName, byte[] buf) { if (!Directory.Exists(Path)) { Directory.CreateDirectory(Path); } if (!File.Exists(Path + "\\" + fileName)) { FileStream f = File.Create(Path + "\\" + fileName); f.Close(); } FileStream f2 = new FileStream(Path + "\\" + fileName, FileMode.Create, FileAccess.Write); f2.Write(buf, 0, buf.Length); f2.Close(); f2.Dispose(); } /// <summary> /// 写文件 /// </summary> /// <param name="Path">文件路径</param> /// <param name="Strings">文件内容</param> /// <param name="encode">ç¼–ç æ ¼å¼</param> public static void WriteFile(string Path, string Strings, Encoding encode) { if (!File.Exists(Path)) { FileStream f = File.Create(Path); f.Close(); } StreamWriter f2 = new StreamWriter(Path, false, encode); f2.Write(Strings); f2.Close(); f2.Dispose(); } #endregion #region 读文件 /**************************************** * 函数å称:ReadFile * åŠŸèƒ½è¯´æ˜Žï¼šè¯»å–æ–‡æœ¬å†…容 * å‚ æ•°ï¼šPath:文件路径 * 调用示列: * string Path = Server.MapPath("Default2.aspx"); * string s = EC.FileObj.ReadFile(Path); *****************************************/ /// <summary> /// 读文件 /// </summary> /// <param name="Path">文件路径</param> /// <returns></returns> public static string ReadFile(string Path) { string s = ""; if (!File.Exists(Path)) s = "ä¸å˜åœ¨ç›¸åº”的目录"; else { StreamReader f2 = new StreamReader(Path, System.Text.Encoding.GetEncoding("gb2312")); s = f2.ReadToEnd(); f2.Close(); f2.Dispose(); } return s; } /// <summary> /// 读文件 /// </summary> /// <param name="Path">文件路径</param> /// <param name="encode">ç¼–ç æ ¼å¼</param> /// <returns></returns> public static string ReadFile(string Path, Encoding encode) { string s = ""; if (!File.Exists(Path)) s = "ä¸å˜åœ¨ç›¸åº”的目录"; else { StreamReader f2 = new StreamReader(Path, encode); s = f2.ReadToEnd(); f2.Close(); f2.Dispose(); } return s; } #endregion #region è¿½åŠ æ–‡ä»¶ /**************************************** * 函数å称:FileAdd * åŠŸèƒ½è¯´æ˜Žï¼šè¿½åŠ æ–‡ä»¶å†…å®¹ * å‚ æ•°ï¼šPath:文件路径,strings:内容 * 调用示列: * string Path = Server.MapPath("Default2.aspx"); * string Strings = "æ–°è¿½åŠ å†…å®¹"; * EC.FileObj.FileAdd(Path, Strings); *****************************************/ /// <summary> /// è¿½åŠ æ–‡ä»¶ /// </summary> /// <param name="Path">文件路径</param> /// <param name="strings">内容</param> public static void FileAdd(string Path, string strings) { StreamWriter sw = File.AppendText(Path); sw.Write(strings); sw.Flush(); sw.Close(); } #endregion #region æ‹·è´æ–‡ä»¶ /**************************************** * 函数å称:FileCoppy * åŠŸèƒ½è¯´æ˜Žï¼šæ‹·è´æ–‡ä»¶ * å‚ æ•°ï¼šOrignFile:原始文件,NewFile:新文件路径 * 调用示列: * string orignFile = Server.MapPath("Default2.aspx"); * string NewFile = Server.MapPath("Default3.aspx"); * EC.FileObj.FileCoppy(OrignFile, NewFile); *****************************************/ /// <summary> /// æ‹·è´æ–‡ä»¶ /// </summary> /// <param name="OrignFile">原始文件</param> /// <param name="NewFile">新文件路径</param> public static void FileCoppy(string orignFile, string NewFile) { File.Copy(orignFile, NewFile, true); } #endregion #region åˆ é™¤æ–‡ä»¶ /**************************************** * 函数å称:FileDel * åŠŸèƒ½è¯´æ˜Žï¼šåˆ é™¤æ–‡ä»¶ * å‚ æ•°ï¼šPath:文件路径 * 调用示列: * string Path = Server.MapPath("Default3.aspx"); * EC.FileObj.FileDel(Path); *****************************************/ /// <summary> /// åˆ é™¤æ–‡ä»¶ /// </summary> /// <param name="Path">路径</param> public static void FileDel(string Path) { File.Delete(Path); } #endregion #region 移动文件 /**************************************** * 函数å称:FileMove * 功能说明:移动文件 * å‚ æ•°ï¼šOrignFile:原始路径,NewFile:新文件路径 * 调用示列: * string orignFile = Server.MapPath("../说明.txt"); * string NewFile = Server.MapPath("http://www.cnblogs.com/说明.txt"); * EC.FileObj.FileMove(OrignFile, NewFile); *****************************************/ /// <summary> /// 移动文件 /// </summary> /// <param name="OrignFile">原始路径</param> /// <param name="NewFile">新路径</param> public static void FileMove(string orignFile, string NewFile) { File.Move(orignFile, NewFile); } #endregion #region 在当å‰ç›®å½•下创建目录 /**************************************** * 函数å称:FolderCreate * 功能说明:在当å‰ç›®å½•下创建目录 * å‚ æ•°ï¼šOrignFolder:当å‰ç›®å½•,NewFloder:新目录 * 调用示列: * string orignFolder = Server.MapPath("test/"); * string NewFloder = "new"; * EC.FileObj.FolderCreate(OrignFolder, NewFloder); *****************************************/ /// <summary> /// 在当å‰ç›®å½•下创建目录 /// </summary> /// <param name="OrignFolder">当å‰ç›®å½•</param> /// <param name="NewFloder">新目录</param> public static void FolderCreate(string orignFolder, string NewFloder) { Directory.SetCurrentDirectory(orignFolder); Directory.CreateDirectory(NewFloder); } #endregion #region é€’å½’åˆ é™¤æ–‡ä»¶å¤¹ç›®å½•åŠæ–‡ä»¶ /**************************************** * 函数å称:DeleteFolder * åŠŸèƒ½è¯´æ˜Žï¼šé€’å½’åˆ é™¤æ–‡ä»¶å¤¹ç›®å½•åŠæ–‡ä»¶ * å‚ æ•°ï¼šdir:文件夹路径 * 调用示列: * string dir = Server.MapPath("test/"); * EC.FileObj.DeleteFolder(dir); *****************************************/ /// <summary> /// é€’å½’åˆ é™¤æ–‡ä»¶å¤¹ç›®å½•åŠæ–‡ä»¶ /// </summary> /// <param name="dir"></param> /// <returns></returns> public static void DeleteFolder(string dir) { if (Directory.Exists(dir)) //如果å˜åœ¨è¿™ä¸ªæ–‡ä»¶å¤¹åˆ 除之 { foreach (string d in Directory.GetFileSystemEntries(dir)) { if (File.Exists(d)) File.Delete(d); //ç›´æŽ¥åˆ é™¤å…¶ä¸çš„æ–‡ä»¶ else DeleteFolder(d); //é€’å½’åˆ é™¤åæ–‡ä»¶å¤¹ } Directory.Delete(dir); //åˆ é™¤å·²ç©ºæ–‡ä»¶å¤¹ } } #endregion #region 将指定文件夹下é¢çš„æ‰€æœ‰å†…容copyåˆ°ç›®æ ‡æ–‡ä»¶å¤¹ä¸‹é¢ æžœç›®æ ‡æ–‡ä»¶å¤¹ä¸ºåªè¯»å±žæ€§å°±ä¼šæŠ¥é”™ã€‚ /**************************************** * 函数å称:CopyDir * 功能说明:将指定文件夹下é¢çš„æ‰€æœ‰å†…容copyåˆ°ç›®æ ‡æ–‡ä»¶å¤¹ä¸‹é¢ æžœç›®æ ‡æ–‡ä»¶å¤¹ä¸ºåªè¯»å±žæ€§å°±ä¼šæŠ¥é”™ã€‚ * å‚ æ•°ï¼šsrcPath:原始路径,aimPath:ç›®æ ‡æ–‡ä»¶å¤¹ * 调用示列: * string srcPath = Server.MapPath("test/"); * string aimPath = Server.MapPath("test1/"); * EC.FileObj.CopyDir(srcPath,aimPath); *****************************************/ /// <summary> /// 指定文件夹下é¢çš„æ‰€æœ‰å†…容copyåˆ°ç›®æ ‡æ–‡ä»¶å¤¹ä¸‹é¢ /// </summary> /// <param name="srcPath">原始路径</param> /// <param name="aimPath">ç›®æ ‡æ–‡ä»¶å¤¹</param> public static void CopyDir(string srcPath, string aimPath) { try { // æ£€æŸ¥ç›®æ ‡ç›®å½•æ˜¯å¦ä»¥ç›®å½•分割å—符结æŸå¦‚æžœä¸æ˜¯åˆ™æ·»åР之 if (aimPath[aimPath.Length - 1] != Path.DirectorySeparatorChar) aimPath += Path.DirectorySeparatorChar; // 判æ–ç›®æ ‡ç›®å½•æ˜¯å¦å˜åœ¨å¦‚æžœä¸å˜åœ¨åˆ™æ–°å»ºä¹‹ if (!Directory.Exists(aimPath)) Directory.CreateDirectory(aimPath); // 得到æºç›®å½•çš„æ–‡ä»¶åˆ—è¡¨ï¼Œè¯¥é‡Œé¢æ˜¯åŒ…嫿–‡ä»¶ä»¥åŠç›®å½•路径的一个数组 //å¦‚æžœä½ æŒ‡å‘copyç›®æ ‡æ–‡ä»¶ä¸‹é¢çš„æ–‡ä»¶è€Œä¸åŒ…å«ç›®å½•请使用下é¢çš„æ–¹æ³• //string[] fileList = Directory.GetFiles(srcPath); string[] fileList = Directory.GetFileSystemEntries(srcPath); //é历所有的文件和目录 foreach (string file in fileList) { //先当作目录处ç†å¦‚æžœå˜åœ¨è¿™ä¸ªç›®å½•就递归Copy该目录下é¢çš„æ–‡ä»¶ if (Directory.Exists(file)) CopyDir(file, aimPath + Path.GetFileName(file)); //å¦åˆ™ç›´æŽ¥Copy文件 else File.Copy(file, aimPath + Path.GetFileName(file), true); } } catch (Exception ee) { throw new Exception(ee.ToString()); } } #endregion } }