Code:
using System; using System.Collections.Generic; using System.Text; using System.IO; namespace SubjectData { public class FileOperator { /// <summary> /// /// </summary> /// <param name="path">文件路径</param> /// <param name="encoding">编码</param> /// <returns>文件内容</returns> public string ReadFile(string path, System.Text.Encoding encoding) { string tempContent = ""; using (StreamReader sr = new StreamReader(path, encoding)) { tempContent = sr.ReadToEnd(); } return tempContent; } /// <summary> /// /// </summary> /// <param name="path">文件的路径</param> /// <param name="append">是否追加</param> /// <param name="encoding">编码</param> /// <param name="content">内容</param> /// <returns>是否成功</returns> public bool WriteFile(string path,bool append,System.Text.Encoding encoding,string content) { bool state = false; try { using (StreamWriter sw = new StreamWriter(path, append, encoding)) { sw.Write(content); sw.Flush(); state = true; } } catch { } return state; } /// <summary> /// 拷贝一个路径下的文件夹和文件 /// </summary> /// <param name="olddirectory"></param> /// <param name="newdirectory"></param> /// <returns></returns> public bool CopyDirectoryAndFiles(string olddirectory, string newdirectory) { bool state = false; try { DirectoryInfo dis = new DirectoryInfo(newdirectory); if (!dis.Exists) { Directory.CreateDirectory(newdirectory); } CopyAll(olddirectory, newdirectory, ""); state = true; } catch { } return state; } /// <summary> /// 递归拷贝一个文件夹的所有文件 /// </summary> /// <param name="olddirectory"></param> /// <param name="newdirectory"></param> /// <param name="dir"></param> protected void CopyAll(string olddirectory, string newdirectory, string dir) { DirectoryInfo dis = new DirectoryInfo(dir.Length > 0 ? (dir) : (olddirectory)); FileInfo[] files = dis.GetFiles(); FileInfo f = null; foreach (FileInfo fi in files) { try { //拷贝文件 File.Copy(fi.FullName, string.Format("{0}\\{1}", dir.Length > 0 ? (dir.Replace(olddirectory, newdirectory)) : (newdirectory), fi.Name)); } catch { try { string filename = string.Format("{0}\\{1}", dir.Length > 0 ? (dir.Replace(olddirectory, newdirectory)) : (newdirectory), fi.Name); f = new FileInfo(filename); if ((f.Attributes & System.IO.FileAttributes.ReadOnly) != 0) f.Attributes -= FileAttributes.ReadOnly; f.Delete(); File.Copy(fi.FullName, string.Format("{0}\\{1}", dir.Length > 0 ? (dir.Replace(olddirectory, newdirectory)) : (newdirectory), fi.Name)); } catch { } } } if (dis.GetDirectories().Length > 0) { for (int i = 0; i < dis.GetDirectories().Length; i++) { //创建目录 string tempNewPath = string.Format("{0}\\{1}", dir.Length > 0 ? (dir.Replace(olddirectory, newdirectory)) : (newdirectory), dis.GetDirectories()[i].Name); if (!Directory.Exists(tempNewPath)) Directory.CreateDirectory(tempNewPath); CopyAll(olddirectory, newdirectory, dis.GetDirectories()[i].FullName); } } } /// <summary> /// /// </summary> /// <param name="oldFilePath"></param> /// <param name="newFilePath"></param> /// <returns></returns> public bool CopyFile(string oldFilePath, string newFilePath) { bool state = false; File.Copy(oldFilePath, newFilePath); return state; } /// <summary> /// /// </summary> /// <param name="directory"></param> /// <returns></returns> public bool DelteDirectory(string directory, string fileext) { bool state = false; DeleteDirectoryAndFiles(directory,fileext); return state; } /// <summary> /// /// </summary> /// <param name="path"></param> protected void DeleteDirectoryAndFiles(string path,string fileext) { DirectoryInfo di = new DirectoryInfo(path); if (di.GetFiles().Length > 0) DeleteFiles(path, fileext); DirectoryInfo[] dis = di.GetDirectories(); if (dis.Length > 0) { foreach (DirectoryInfo tempdi in dis) { DeleteDirectoryAndFiles(tempdi.FullName, fileext); if (tempdi.GetFiles().Length < 1 && tempdi.GetDirectories().Length < 1) tempdi.Delete(); } } } /// <summary> /// 删除文件夹的所有文件 /// </summary> /// <param name="path"></param> protected void DeleteFiles(string path,string sp) { DirectoryInfo di = new DirectoryInfo(path); FileInfo[] fis=null; if (string.IsNullOrEmpty(sp)) fis = di.GetFiles(); else fis = di.GetFiles(sp); foreach (FileInfo fi in fis) { try { if ((fi.Attributes & FileAttributes.ReadOnly) != 0) fi.Attributes -= FileAttributes.ReadOnly; fi.Delete(); } catch { continue; } } } } }