[c#] [基础] 文件操作公共类 写cms的人可以稍微用一下~
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO; using Microsoft.Practices.EnterpriseLibrary.Data; /// <summary> /// 文件操作 /// </summary> namespace Info.DataAccess { public class dbfile { public dbfile() { } /// <summary> /// 创建目录 /// </summary> /// <param name="dir">此地路径相对站点而言</param> public void CreateDir(string dir) { if (dir.Length == 0) return; if (!System.IO.Directory.Exists(System.Web.HttpContext.Current.Server.MapPath(dir))) System.IO.Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath(dir)); } /// <summary> /// 创建目录路径 /// </summary> /// <param name="folderPath">物理路径</param> public void CreateFolder(string folderPath) { if (!System.IO.Directory.Exists(folderPath)) System.IO.Directory.CreateDirectory(folderPath); } /// <summary> /// 删除目录 /// </summary> /// <param name="dir">此地路径相对站点而言</param> public void DeleteDir(string dir) { if (dir.Length == 0) return; if (System.IO.Directory.Exists(System.Web.HttpContext.Current.Server.MapPath(dir))) System.IO.Directory.Delete(System.Web.HttpContext.Current.Server.MapPath(dir), true); } /// <summary> /// 判断文件是否存在 /// </summary> /// <param name="file">格式:a/b.htm,相对根目录</param> /// <returns></returns> public bool FileExists(string file) { if (File.Exists(System.Web.HttpContext.Current.Server.MapPath(file))) return true; else return false; } /// <summary> /// 读取文件内容 /// </summary> /// <param name="file">格式:a/b.htm,相对根目录</param> /// <returns></returns> public string ReadFile(string file) { if (!FileExists(file)) return ""; try { System.IO.StreamReader sr = new System.IO.StreamReader(System.Web.HttpContext.Current.Server.MapPath(file), System.Text.Encoding.UTF8); string str = sr.ReadToEnd(); sr.Close(); return str; } catch (Exception ex) { throw ex; } } /// <summary> /// 保存为不带Bom的文件 /// </summary> /// <param name="TxtStr"></param> /// <param name="tempDir">格式:a/b.htm,相对根目录</param> public void SaveFile(string TxtStr, string tempDir) { SaveFile(TxtStr, tempDir, true); } /// <summary> /// 保存为带Bom的文件 /// </summary> /// <param name="TxtStr"></param> /// <param name="tempDir">格式:a/b.htm,相对根目录</param> public void SaveBomFile(string TxtStr, string tempDir) { SaveFile(TxtStr, tempDir, false); } /// <summary> /// 保存文件内容,自动创建目录 /// </summary> /// <param name="TxtStr"></param> /// <param name="tempDir">格式:a/b.htm,相对根目录</param> /// <param name="noBom"></param> public void SaveFile(string TxtStr, string tempDir, bool noBom) { try { CreateDir(GetFolderPath(true, tempDir)); System.IO.StreamWriter sw; if (noBom) sw = new System.IO.StreamWriter(System.Web.HttpContext.Current.Server.MapPath(tempDir), false, new System.Text.UTF8Encoding(false)); else sw = new System.IO.StreamWriter(System.Web.HttpContext.Current.Server.MapPath(tempDir), false, System.Text.Encoding.UTF8); sw.Write(TxtStr); sw.Close(); } catch (Exception ex) { throw ex; } } /// <summary> /// 复制文件 /// </summary> /// <param name="file1"></param> /// <param name="file2"></param> /// <param name="overwrite">如果已经存在是否覆盖?</param> public void CopyFile(string file1, string file2, bool overwrite) { if (System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(file1))) { if (overwrite) System.IO.File.Copy(System.Web.HttpContext.Current.Server.MapPath(file1), System.Web.HttpContext.Current.Server.MapPath(file2), true); else { if (!System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(file2))) System.IO.File.Copy(System.Web.HttpContext.Current.Server.MapPath(file1), System.Web.HttpContext.Current.Server.MapPath(file2)); } } } /// <summary> /// 删除文件 /// </summary> /// <param name="file">此地路径相对程序路径而言</param> public void DeleteFile(string file) { if (file.Length == 0) return; if (System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(file))) System.IO.File.Delete(System.Web.HttpContext.Current.Server.MapPath(file)); } /// <summary> /// 获得文件的目录路径 /// </summary> /// <param name="filePath">文件路径</param> /// <returns>以\结尾</returns> public string GetFolderPath(string filePath) { return GetFolderPath(false, filePath); } /// <summary> /// 获得文件的目录路径 /// </summary> /// <param name="isUrl">是否是网址</param> /// <param name="filePath">文件路径</param> /// <returns>以\或/结尾</returns> public string GetFolderPath(bool isUrl, string filePath) { if (isUrl) return filePath.Substring(0, filePath.LastIndexOf("/") + 1); else return filePath.Substring(0, filePath.LastIndexOf("\\") + 1); } /// <summary> /// 获得文件的名称 /// </summary> /// <param name="filePath"></param> /// <returns></returns> public string GetFileName(string filePath) { return GetFileName(false, filePath); } /// <summary> /// 获得文件的名称 /// </summary> /// <param name="isUrl">是否是网址</param> /// <param name="filePath"></param> /// <returns></returns> public string GetFileName(bool isUrl, string filePath) { if (isUrl) return filePath.Substring(filePath.LastIndexOf("/") + 1, filePath.Length - filePath.LastIndexOf("/") - 1); else return filePath.Substring(filePath.LastIndexOf("\\") + 1, filePath.Length - filePath.LastIndexOf("\\") - 1); } /// <summary> /// 获得文件的后缀 /// 不带点,小写 /// </summary> /// <param name="filePath"></param> /// <returns></returns> public string GetFileExt(string filePath) { return filePath.Substring(filePath.LastIndexOf(".") + 1, filePath.Length - filePath.LastIndexOf(".") - 1).ToLower(); } /// <summary> /// 目录拷贝 /// </summary> /// <param name="OldDir"></param> /// <param name="NewDir"></param> public void CopyDir(string OldDir, string NewDir) { DirectoryInfo OldDirectory = new DirectoryInfo(OldDir); DirectoryInfo NewDirectory = new DirectoryInfo(NewDir); CopyDir(OldDirectory, NewDirectory); } private static void CopyDir(DirectoryInfo OldDirectory, DirectoryInfo NewDirectory) { string NewDirectoryFullName = NewDirectory.FullName + "\\" + OldDirectory.Name; if (!Directory.Exists(NewDirectoryFullName)) Directory.CreateDirectory(NewDirectoryFullName); FileInfo[] OldFileAry = OldDirectory.GetFiles(); foreach (FileInfo aFile in OldFileAry) File.Copy(aFile.FullName, NewDirectoryFullName + "\\" + aFile.Name, true); DirectoryInfo[] OldDirectoryAry = OldDirectory.GetDirectories(); foreach (DirectoryInfo aOldDirectory in OldDirectoryAry) { DirectoryInfo aNewDirectory = new DirectoryInfo(NewDirectoryFullName); CopyDir(aOldDirectory, aNewDirectory); } } /// <summary> /// 目录删除 /// </summary> /// <param name="OldDir"></param> public void DelDir(string OldDir) { DirectoryInfo OldDirectory = new DirectoryInfo(OldDir); OldDirectory.Delete(true); } /// <summary> /// 目录剪切 /// </summary> /// <param name="OldDirectory"></param> /// <param name="NewDirectory"></param> public void CopyAndDelDir(string OldDirectory, string NewDirectory) { CopyDir(OldDirectory, NewDirectory); DelDir(OldDirectory); } /// <summary> /// 文件下载 /// </summary> /// <param name="_Request"></param> /// <param name="_Response"></param> /// <param name="_fullPath">源文件路径</param> /// <param name="_speed"></param> /// <returns></returns> public bool DownloadFile(System.Web.HttpRequest _Request, System.Web.HttpResponse _Response, string _fullPath, long _speed) { string _fileName = GetFileName(false, _fullPath); try { FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); BinaryReader br = new BinaryReader(myFile); try { _Response.AddHeader("Accept-Ranges", "bytes"); _Response.Buffer = false; long fileLength = myFile.Length; long startBytes = 0; double pack = 10240; //10K bytes //int sleep = 200; //每秒5次 即5*10K bytes每秒 int sleep = (int)Math.Floor(1000 * pack / _speed) + 1; if (_Request.Headers["Range"] != null) { _Response.StatusCode = 206; string[] range = _Request.Headers["Range"].Split(new char[] { '=', '-' }); startBytes = Convert.ToInt64(range[1]); } _Response.AddHeader("Content-Length", (fileLength - startBytes).ToString()); _Response.AddHeader("Connection", "Keep-Alive"); _Response.ContentType = "application/octet-stream"; _Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8)); br.BaseStream.Seek(startBytes, SeekOrigin.Begin); int maxCount = (int)Math.Floor((fileLength - startBytes) / pack) + 1; for (int i = 0; i < maxCount; i++) { if (_Response.IsClientConnected) { _Response.BinaryWrite(br.ReadBytes(int.Parse(pack.ToString()))); System.Threading.Thread.Sleep(sleep); } else { i = maxCount; } } } catch { return false; } finally { br.Close(); myFile.Close(); } } catch { return false; } return true; } } }