123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.IO;
- namespace LYFZ.Network.FileOperations
- {
- /// <summary>
- /// 文件操作类
- /// </summary>
- public class FileOperation
- {
- /// <summary>
- /// 删除文件夹下所有文件
- /// </summary>
- /// <param name="dir"></param>
- public bool DeleteFolder(string dir) {
- string _message = "";
- return DeleteFolder(dir, out _message);
- }
- /// <summary>
- /// 删除文件夹下所有文件
- /// </summary>
- /// <param name="dir"></param>
- /// <param name="message"></param>
- /// <returns></returns>
- public bool DeleteFolder(string dir,out string message)
- {
- bool bl = false;
- //如果存在这个文件夹删除之
- if (Directory.Exists(dir))
- {
- foreach (string d in Directory.GetFileSystemEntries(dir))
- {
- if (File.Exists(d))
- File.Delete(d);//直接删除其中的文件
- else DeleteFolder(d, out message);//递归删除子文件夹
- }
- Directory.Delete(dir);
- //删除已空文件夹
- message = (dir + "文件夹删除成功");
- bl = true;
- }
- else
- {//如果文件夹不存在则提示
- message = (dir + "该文件夹不存在");
- bl = false;
- }
- return bl;
- }
- /// <summary>
- /// 实现一个静态方法将指定文件夹下面的所有内容Detele
- /// 测试的时候要小心操作,删除之后无法恢复。
- /// </summary>
- /// <param name="aimPath"></param>
- /// <param name="isDeleteOwn">是否删除指定文件夹自己</param>
- /// <returns></returns>
- public static void DeleteDir(string aimPath, bool isDeleteOwn=false)
- {
- try
- {
- //检查目标目录是否以目录分割字符结束如果不是则添加之
- if (aimPath[aimPath.Length - 1] !=
- Path.DirectorySeparatorChar)
- aimPath += Path.DirectorySeparatorChar;
- //得到源目录的文件列表,该里面是包含文件以及目录路径的一个数组
- //如果你指向Delete目标文件下面的文件而不包含目录请使用下面的方法
- //string[]fileList= Directory.GetFiles(aimPath);
- string[] fileList = Directory.GetFileSystemEntries(aimPath);
- //遍历所有的文件和目录
- foreach (string file in fileList)
- {
- //先当作目录处理如果存在这个
- //目录就递归Delete该目录下面的文件
- if (Directory.Exists(file))
- {
- DeleteDir(aimPath + Path.GetFileName(file));
- }
- //否则直接Delete文件
- else
- {
- File.Delete(aimPath + Path.GetFileName(file));
- }
- }
-
- //删除文件夹
- if (!isDeleteOwn)
- {
- DirectoryInfo dirInfo = new DirectoryInfo(aimPath);
- //取得源文件夹下的所有子文件夹名称
- DirectoryInfo[] ZiPath = dirInfo.GetDirectories();
- for (int j = 0; j < ZiPath.Length; j++)
- {
- //获取子文件夹名
- string strZiPath = aimPath + "\\" + ZiPath[j].ToString();
- //删除当前文件夹
- System.IO.Directory.Delete(strZiPath, true);
- }
- }
- else
- {
- System.IO.Directory.Delete(aimPath, true);
- }
- }
- catch (Exception e)
- {
- throw new Exception(e.Message);
- }
- }
-
- /// <summary>
- /// 拷贝文件夹(包括子文件夹)到指定文件夹下
- /// 文件和文件夹分开复制,当是文件夹则递归复制
- ///源文件夹和目标文件夹均需绝对路径
- ///格式:CopyFolder(源文件夹,目标文件夹)
- /// </summary>
- /// <param name="strFromPath">待复制地址</param>
- /// <param name="strToPath">目标地址</param>
- public static void CopyFolder(string strFromPath, string strToPath, bool overwrite = false)
- {
- //如果源文件夹不存在,则创建
- if (!Directory.Exists(strFromPath))
- {
- Directory.CreateDirectory(strFromPath);
- }
- //取得要拷贝的文件夹名
- string strFolderName = strFromPath.Substring(
- strFromPath.LastIndexOf("\\") + 1,
- strFromPath.Length -
- strFromPath.LastIndexOf("\\") - 1);
- //如果目标文件夹中没有源文件夹
- //则在目标文件夹中创建源文件夹
- if (!Directory.Exists(
- strToPath + "\\" + strFolderName))
- {
- Directory.CreateDirectory(
- strToPath + "\\" + strFolderName);
- }
- //创建数组保存源文件夹下的文件名
- string[] strFiles =
- Directory.GetFiles(strFromPath);
- //循环拷贝文件
- for (int i = 0; i < strFiles.Length; i++)
- {
- //取得拷贝的文件名,只取文件名,地址截掉。
- string strFileName = strFiles[i].Substring(
- strFiles[i].LastIndexOf("\\") + 1,
- strFiles[i].Length -
- strFiles[i].LastIndexOf("\\") - 1);
- string copyToPath = strToPath + "\\" + strFolderName +
- "\\" + strFileName;
-
- if (overwrite || !System.IO.File.Exists(copyToPath))
- {
- //开始拷贝文件,true表示覆盖同名文件
- File.Copy(
- strFiles[i],
- copyToPath,
- true);
- }
- else if (System.IO.File.Exists(copyToPath))
- {
- try
- {
- string fileMd51 = LYFZ.WinAPI.SDKSecurity.GetMD5HashFromFile(copyToPath);
- string fileMd52 = LYFZ.WinAPI.SDKSecurity.GetMD5HashFromFile(strFiles[i]);
- if (fileMd51 != fileMd52)
- {
- try
- {
- System.IO.File.Move(copyToPath, strToPath + "\\" + strFolderName + "\\[oldfile_" + DateTime.Now.ToString("yyyy-MM-dd") + "]" + strFileName);
- }
- catch
- {
- }
- //开始拷贝文件,true表示覆盖同名文件
- File.Copy(
- strFiles[i],
- copyToPath,
- true);
- }
- }
- catch { }
- }
- }
- //创建DirectoryInfo实例
- DirectoryInfo dirInfo =
- new DirectoryInfo(strFromPath);
- //取得源文件夹下的所有子文件夹名称
- DirectoryInfo[] ZiPath =
- dirInfo.GetDirectories();
- for (int j = 0; j < ZiPath.Length; j++)
- {
- //获取所有子文件夹名
- string strZiPath = strFromPath + "\\" +
- ZiPath[j].ToString();
- //把得到的子文件夹当成新的
- //源文件夹,从头开始新一轮的拷贝
- CopyFolder(
- strZiPath,
- strToPath + "\\" + strFolderName);
- }
- }
- public static void CopyFile(string srcFile, string toDirPath, bool overwrite = false)
- {
- //取得拷贝的文件名,只取文件名,地址截掉。
- string strFileName = srcFile.Substring(
- srcFile.LastIndexOf("\\") + 1,
- srcFile.Length -
- srcFile.LastIndexOf("\\") - 1);
- string copyToPath = toDirPath + "\\" +
- "\\" + strFileName;
- if (overwrite || !System.IO.File.Exists(copyToPath))
- {
- //开始拷贝文件,true表示覆盖同名文件
- File.Copy(
- srcFile,
- copyToPath,
- true);
- }
- else if (System.IO.File.Exists(copyToPath))
- {
- try
- {
- string fileMd51 = LYFZ.WinAPI.SDKSecurity.GetMD5HashFromFile(copyToPath);
- string fileMd52 = LYFZ.WinAPI.SDKSecurity.GetMD5HashFromFile(srcFile);
- if (fileMd51 != fileMd52)
- {
- try
- {
- System.IO.File.Move(copyToPath, toDirPath + "\\[oldfile_" + DateTime.Now.ToString("yyyy-MM-dd") + "]" + strFileName);
- }
- catch
- {
- }
- //开始拷贝文件,true表示覆盖同名文件
- File.Copy(
- srcFile,
- copyToPath,
- true);
- }
- }
- catch { }
- }
- }
- /// <summary>
- /// 实现一个静态方法将指定文件夹下面的所有
- /// 内容copy到目标文件夹下面
- /// 如果目标文件夹为只读属性就会报错
- /// </summary>
- /// <param name="srcPath">源文件件</param>
- /// <param name="aimPath">目的文件夹</param>
- public 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 e)
- {
- throw new Exception(e.Message);
- }
- }
- #region 增加文件操作方法 2017-03-17 杨云奕 添加
- /// <summary>
- /// 检查文件夹是否存在
- /// </summary>
- /// <param name="dirPath"></param>
- /// <returns></returns>
- public static bool CheckAndCreateDirectory(string dirPath)
- {
- try
- {
- if (!Directory.Exists(dirPath))
- {
- Directory.CreateDirectory(dirPath);
- }
- return true;
- }
- catch {
- return false;
- }
- }
- /// <summary>
- /// 读取文件
- /// </summary>
- /// <param name="filePaht"></param>
- /// <returns></returns>
- public static string ReadFile(string filePaht)
- {
- if (File.Exists(filePaht))
- {
- return File.ReadAllText(filePaht);
- }
- else
- {
- return "";
- }
- }
- /// <summary>
- /// 写入文件
- /// </summary>
- /// <param name="filePath"></param>
- /// <param name="txt"></param>
- public static void WriteFile(string filePath,string txt)
- {
- string dir = Path.GetDirectoryName(filePath);
- if(CheckAndCreateDirectory(dir))
- {
- File.WriteAllText(filePath, txt);
- }
- }
- /// <summary>
- /// 写入附加文件
- /// </summary>
- /// <param name="filePath"></param>
- /// <param name="txt"></param>
- public static void WriteAppendFile(string filePath, string txt)
- {
- string dir = Path.GetDirectoryName(filePath);
- if (CheckAndCreateDirectory(dir))
- {
- File.AppendAllText(filePath, txt);
- }
- }
- /// <summary>
- /// 文件夹中的文件
- /// </summary>
- /// <param name="dir"></param>
- /// <returns></returns>
- public static string[] GetDirectoryFile(string dir)
- {
- if (!Directory.Exists(dir))
- {
- CheckAndCreateDirectory(dir);
- }
- return Directory.GetFiles(dir);
- }
- #endregion
- }
- }
|