FileHelper
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms; namespace DocDecrypt.Common
{
public class FileHelper
{
private static readonly log4net.ILog _logger = log4net.LogManager.GetLogger("FileHelper"); private static void PrintExcetpion(string errors, Exception ex)
{
_logger.ErrorFormat(errors + " {0} \r\n {1}", ex.Message, ex.StackTrace);
} public static string GetTempFileName(string fileName)
{
return Path.Combine(Path.GetTempPath(), string.IsNullOrEmpty(fileName) ? "~temp.tmp" : fileName);
} ///////////////////////////////////
// 文件基本操作
public static void ClearOrCreatePath(string dstPath)
{
if (Directory.Exists(dstPath))
ClearPath(dstPath);
else
CreateDirectoy(dstPath);
} public static void ClearPath(string dstPath)
{
try
{
if (!new System.IO.DirectoryInfo(dstPath).Exists)
return; foreach (string d in System.IO.Directory.GetFileSystemEntries(dstPath))
{
if (System.IO.File.Exists(d))
{
System.IO.FileInfo fi = new System.IO.FileInfo(d);
DeleteFile(fi); // 直接删除其中的文件
}
else
{
System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(d);
DeletePath(di.FullName); // 删除子文件夹
}
}
}
catch (Exception ex)
{
PrintExcetpion(string.Format("清除文件夹失败-{0}", dstPath),ex);
}
} /// <summary>
/// 删除目录下的所有文件(只删除文件)
/// </summary>
/// <param name="dstPath"></param>
public static void DeleteFiles(string dstPath)
{
try
{
if (!new System.IO.DirectoryInfo(dstPath).Exists)
return; foreach (string d in System.IO.Directory.GetFiles(dstPath))
{
if (System.IO.File.Exists(d))
{
System.IO.FileInfo fi = new System.IO.FileInfo(d);
DeleteFile(fi); // 直接删除其中的文件
}
}
}
catch (Exception ex)
{
PrintExcetpion(string.Format("删除目录下的所有文件失败-{0}", dstPath), ex);
}
} public static void DeletePath(string dstPath)
{
try
{
if (!Directory.Exists(dstPath))
return; foreach (string d in System.IO.Directory.GetFileSystemEntries(dstPath))
{
if (System.IO.File.Exists(d))
{
System.IO.FileInfo fi = new System.IO.FileInfo(d);
DeleteFile(fi); // 直接删除其中的文件
}
else
DeletePath(d); // 递归删除子文件夹
} System.IO.Directory.Delete(dstPath); // 删除已空文件夹
}
catch (Exception ex)
{
PrintExcetpion(string.Format("删除文件夹失败-{0}", dstPath), ex);
}
} public static void CopyFile(string src, string dst)
{
try
{
if (src.ToLower() == dst.ToLower())
return; if (!File.Exists(src))
return; FileHelper.DeleteFile(dst);
FileHelper.CreateDirectoy(Path.GetDirectoryName(dst)); System.IO.File.Copy(src, dst);
}
catch (Exception ex)
{
PrintExcetpion(string.Format("拷贝文件失败-{0}:{1}", src,dst), ex);
}
} public static bool IsFileExist(string file)
{
return !string.IsNullOrEmpty(file) && File.Exists(file);
} public static bool IsDirExist(string dir)
{
return !string.IsNullOrEmpty(dir) && Directory.Exists(dir);
} public static void MoveFile(string src, string dst)
{
try
{
if (string.Equals(src, dst, StringComparison.CurrentCultureIgnoreCase))
return; if (!File.Exists(src))
return; FileHelper.DeleteFile(dst);
FileHelper.CreateDirectoy(Path.GetDirectoryName(dst)); System.IO.File.Move(src, dst);
}
catch (Exception ex)
{
PrintExcetpion($"移动文件失败-{src}:{dst}", ex);
}
} public static void MovePath(string srcPath, string dstPath)
{
try
{
if (srcPath.ToLower() == dstPath.ToLower())
return; if (!Directory.Exists(srcPath))
return; ClearOrCreatePath(dstPath); System.IO.Directory.Move(srcPath, dstPath);
}
catch (Exception ex)
{
PrintExcetpion(string.Format("拷贝文件失败-{0}:{1}", srcPath, dstPath), ex);
}
} public static string DiskTypeInfo = "Disk"; public static void MovePath_copy_delete(string srcPath, string dstPath)
{
try
{
if (srcPath.ToLower() == dstPath.ToLower())
return; if (!Directory.Exists(srcPath))
return; ClearOrCreatePath(dstPath); MoveDirectory(srcPath, dstPath);
if (DiskTypeInfo == "Disk")
{
DeletePath(srcPath);
} }
catch (Exception ex)
{
PrintExcetpion($"拷贝删除文件失败-{srcPath}:{dstPath}", ex);
}
} /// <summary>
/// 移动整个文件夹
/// </summary>
/// <param name="srcDir"></param>
/// <param name="tgtDir"></param>
public static void MoveDirectory(string srcDir, string tgtDir)
{
if (string.Equals(srcDir, tgtDir, StringComparison.CurrentCultureIgnoreCase))
return; if (!Directory.Exists(srcDir))
return; DirectoryInfo source = new DirectoryInfo(srcDir);
DirectoryInfo target = new DirectoryInfo(tgtDir); if (target.FullName.StartsWith(source.FullName, StringComparison.CurrentCultureIgnoreCase))
{
throw new Exception("父目录不能拷贝到子目录!");
} if (!source.Exists)
{
return;
} if (!target.Exists)
{
target.Create();
} FileInfo[] files = source.GetFiles(); foreach (var file in files)
{
if (DiskTypeInfo == "Disk")
{
File.Move(file.FullName, target.FullName + @"\" + file.Name);
}
else
File.Copy(file.FullName, target.FullName + @"\" + file.Name);
} DirectoryInfo[] dirs = source.GetDirectories(); foreach (var dir in dirs)
{
MoveDirectory(dir.FullName, target.FullName + @"\" + dir.Name);
}
} public static void CopyDirectory(string srcDir, string tgtDir)
{
if (srcDir.ToLower() == tgtDir.ToLower())
return; if (!Directory.Exists(srcDir))
return; DirectoryInfo source = new DirectoryInfo(srcDir);
DirectoryInfo target = new DirectoryInfo(tgtDir); if (target.FullName.StartsWith(source.FullName, StringComparison.CurrentCultureIgnoreCase))
{
throw new Exception("父目录不能拷贝到子目录!");
} if (!source.Exists)
{
return;
} if (!target.Exists)
{
target.Create();
} FileInfo[] files = source.GetFiles(); foreach (var file in files)
{
File.Copy(file.FullName, target.FullName + @"\" + file.Name, true);
} DirectoryInfo[] dirs = source.GetDirectories(); foreach (var dir in dirs)
{
CopyDirectory(dir.FullName, target.FullName + @"\" + dir.Name);
}
} public static void DeleteFile(string fileName)
{
try
{
FileInfo fi = new System.IO.FileInfo(fileName);
DeleteFile(fi);
}
catch (Exception ex)
{
PrintExcetpion($"删除文件失败-{fileName}", ex);
}
} public static void DeleteFile(FileInfo fi)
{
try
{
if (fi.Exists)
{
if (fi.Attributes.ToString().IndexOf("ReadOnly") != -)
fi.Attributes = System.IO.FileAttributes.Normal;
System.IO.File.Delete(fi.FullName); fi.Delete();
}
}
catch (Exception ex)
{
PrintExcetpion($"删除文件失败-{fi.FullName}", ex);
}
} public static void CreateDirectoyFromFileName(string fileName)
{
try
{
string path = Path.GetDirectoryName(fileName);
if (!new System.IO.DirectoryInfo(path).Exists)
System.IO.Directory.CreateDirectory(path);
}
catch (Exception ex)
{
PrintExcetpion($"创建文件夹失败-{fileName}", ex);
}
} public static void CreateDirectoyByFileName(string fileName)
{
try
{
string dir = Path.GetDirectoryName(fileName);
CreateDirectoy(dir);
}
catch (Exception ex)
{
PrintExcetpion($"由文件创建文件夹失败-{fileName}", ex);
}
} public static void CreateDirectoy(string dir)
{
try
{
if (!new System.IO.DirectoryInfo(dir).Exists)
System.IO.Directory.CreateDirectory(dir);
}
catch (Exception ex)
{
PrintExcetpion($"创建文件夹失败-{dir}", ex);
}
} public static string[] GetAllSubDirs(string root, SearchOption searchOption)
{
string[] all = null;
try
{
all = Directory.GetDirectories(root, "*", searchOption);
}
catch
{
// ignored
} return all;
} public static List<string> GetAllPureSubDirs(string root)
{
List<string> list = new List<string>();
try
{
string[] all = Directory.GetDirectories(root, "*", SearchOption.TopDirectoryOnly);
foreach (string path in all)
{
string s = System.IO.Path.GetFileName(path);
list.Add(s);
}
}
catch
{
// ignored
} return list;
} public static long GetFilesSize(string[] fileNames)
{
return fileNames.Sum(fileName => GetFileSize(fileName));
} public static long GetFileSize(string fileName)
{
if (!string.IsNullOrEmpty(fileName) && File.Exists(fileName))
return new FileInfo(fileName).Length; return ;
} /// <summary>
/// Files the content.
/// </summary>
/// <param name="fileName">Name of the file.</param>
/// <returns></returns>
public static byte[] FileContent(string fileName)
{
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
try
{
byte[] buffur = new byte[fs.Length];
fs.Read(buffur, , (int)fs.Length); return buffur;
}
catch (Exception ex)
{
Console.WriteLine("读取文件字节流失败: {0}", ex.Message);
return null;
}
finally
{
if (fs != null)
{
//关闭资源
fs.Close();
}
}
} public static bool SaveString2File(string content, string fileName)
{
StreamWriter sw = null; try
{
CreateDirectoyFromFileName(fileName); sw = new StreamWriter(fileName);
sw.WriteLine(content);
}
catch (Exception ex)
{
PrintExcetpion($"保存内容错误-{fileName}", ex);
return false;
} if (sw != null)
sw.Close(); return true;
} public static string LoadStringFromFile(string fileName)
{
string content = string.Empty; StreamReader sr = null;
try
{
sr = new StreamReader(fileName,System.Text.Encoding.UTF8);
content = sr.ReadToEnd();
}
catch (Exception ex)
{
PrintExcetpion($"读取内容错误-{fileName}", ex);
} if (sr != null)
sr.Close(); return content;
} public static string GetLocalFileName(string lastPath, string displayName, string[] typeNames)
{
OpenFileDialog ofd = new System.Windows.Forms.OpenFileDialog(); // ofd.InitialDirectory = lastPath;
ofd.RestoreDirectory = true; // "动画(.flc;.fli;.gif;.swf)|*.flc;*.fli;*.gif;*.swf|Animation(.flc,.fli)|*.flc;*.fli|Gif89a(.gif)|*.gif|SWF(*.swf)|*.swf|"
// displayName + "(*.epub|All files (*.*)|*.*";
string filter = displayName + "("; filter = typeNames.Aggregate(filter, (current, ext) => current + ("." + ext + ";")); filter += ")|"; for (int i = ; i < typeNames.Length; i++)
{
filter += "*." + typeNames[i];
if (i < typeNames.Length - )
filter += ";";
} // filter += "|全部文件 (*.*)|*.*";
ofd.Filter = filter; return ofd.ShowDialog() != System.Windows.Forms.DialogResult.OK ? string.Empty : ofd.FileName;
} /// <summary>
/// 获取差异的文件列表
/// </summary>
/// <param name="srcDir"></param>
/// <param name="destDir"></param>
/// <returns></returns>
public static List<string> GetNotSameFiles(string srcDir, string destDir)
{
var oldData = new List<string>();
var newData = new List<string>();
new DirectoryInfo(srcDir).GetFiles().ToList().ForEach((f) =>
{
newData.Add(f.Name);
}); new DirectoryInfo(destDir).GetFiles().ToList().ForEach((f) =>
{
oldData.Add(f.Name);
}); //求交集
var dupComparer = new InlineComparer<string>((i1, i2) => i1.Equals(i2), i => i.GetHashCode());
var _IntersectData = oldData.Intersect(newData, dupComparer); if (_IntersectData == null || _IntersectData.Count() == )
return null; // 处理交集文件里可能有差异的内容。
var _files = new List<string>(); // 通过md5先过滤一部分数据 然后找到有差异的文件列表
_IntersectData.ToList().ForEach((s) =>
{
var o = Path.Combine(destDir, s);
var n = Path.Combine(srcDir, s); var omd5 = Md5FileHelper.MD5File(o);
var nmd5 = Md5FileHelper.MD5File(n); if (!omd5.Equals(nmd5))
{
_files.Add(s);
}
}); return _files;
} /// <summary>
/// 获取root文件夹下所有的文件,包含子文件夹中的文件
/// </summary>
/// <param name="root">文件夹路径</param>
/// <param name="extension">文件扩展名,默认为所有文件</param>
/// <returns>root文件夹下所有的文件的列表</returns>
public static List<string> GetAllFileList(string root, string extension = "")
{
if (Directory.Exists(root))
{
var dirList = GetAllSubDirs(root, SearchOption.AllDirectories).ToList();
dirList.Add(root); var list = new List<string>(); foreach (var dir in dirList)
{
DirectoryInfo dirInfo = new DirectoryInfo(dir);
dirInfo.GetFiles().ToList().ForEach(f =>
{
if (!string.IsNullOrWhiteSpace(extension))
{
if (f.Extension == (extension.Contains(".") ? extension : "." + extension))
{
list.Add(f.FullName);
}
}
else
{
list.Add(f.FullName);
}
});
} return list;
}
else
{
return null;
}
} public class InlineComparer<T> : IEqualityComparer<T>
{
private readonly Func<T, T, bool> getEquals;
private readonly Func<T, int> getHashCode; public InlineComparer(Func<T, T, bool> equals, Func<T, int> hashCode)
{
this.getEquals = equals;
this.getHashCode = hashCode;
} public bool Equals(T x, T y)
{
return this.getEquals(x, y);
} public int GetHashCode(T obj)
{
return this.getHashCode(obj);
}
}
}
}
---------------------
作者:代码养家
来源:CSDN
原文:https://blog.csdn.net/wangzl1163/article/details/79306885
版权声明:本文为博主原创文章,转载请附上博文链接!
FileHelper的更多相关文章
- 【无私分享:ASP.NET CORE 项目实战(第七章)】文件操作 FileHelper
目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 在程序设计中,我们很多情况下,会用到对文件的操作,在 上一个系列 中,我们有很多文件基本操作的示例,在Core中有一些改变,主 ...
- C# 最全的文件工具类FileHelper
using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Lin ...
- [No0000DC]C# FileHelper 本地文件、文件夹操作类封装FileHelper
using System; using System.Diagnostics; using System.IO; using System.Text; using Shared; namespace ...
- C#-FileHelper
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)
很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有“内置”定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对 ...
- sqlyog导出json数据格式支持mysql数据转存mongodb
<!-------------知识的力量是无限的(当然肯定还有更简单的方法)-----------!> 当我考虑将省市区三级联动数据从mysql转入mongodb时遇到了网上无直接插入mo ...
- 【无私分享:ASP.NET CORE 项目实战】目录索引
简介 首先,我们的 [无私分享:从入门到精通ASP.NET MVC] 系列已经接近尾声,希望大家在这个过程中学到了一些思路和方法,而不仅仅是源码. 因为是第一次写博客,我感觉还是比较混乱的,其中 ...
- shell 带签名请求,yii 处理带签名的请求
处理请求 class TestController extends Controller { public function init() { if(!YII_ENV_DEV){ throw new ...
- Thread.Sleep引发ThreadAbortException异常
短信平台记录日志模块,是通过异步方式来记录的,即日志工具类里初始化一个Queue对象,公共的写日志方法的处理逻辑是把日志消息放到Queue里.构造器里设定一个死循环,不停的读队,然后把日志消息持久化到 ...
随机推荐
- 用户之间imp的问题
今天同事说申请了一个从生产导出的dump文件,须要导入測试库进行測试. 之前做的基本都是本库导出,本库导入的操作,比如:imp test/***@test tables=tbl_fuel file=H ...
- android Navigator的高度计算和推断是否显示
进入互联网行业几天了, 从手机行业转到互联网行业也在慢慢的适应: IDE工具的使用(之前一直在Ubuntu 命令行进行开发). 版本号管理工具,代码架构等等这些都须要又一次适应. 好在本人另一些底子, ...
- vs 2013 常用快捷键及常见问题的解决
1. 代码编辑 关闭当前文档:ctrl + F4 打开光标所在位置的文档:ctrl + G(shift + g) 返回上次编辑的位置:ctrl + -(键盘数字键 0 后的那个按键) 移动光标所在的行 ...
- css3 实现水晶按钮
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee432e), color-sto ...
- Android 延时执行的几种方法
开启新线程 new Thread(new Runnable(){ public void run(){ Thread.sleep(XXXX); handler.sendMessage(); //告诉主 ...
- 【t075】郁闷的记者
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 你是一个体育报社的记者,你接受到一个艰难的任务:有N支足球队参加足球比赛,现在给你一些比赛的结果,需要 ...
- HDU 5044 Tree(树链剖分)
HDU 5044 Tree field=problem&key=2014+ACM%2FICPC+Asia+Regional+Shanghai+Online&source=1&s ...
- php如何实现万年历的开发(每日一课真是非常有效率)
php如何实现万年历的开发(每日一课真是非常有效率) 一.总结 一句话总结: 1.判断每月有多少天: 通过data函数来判断,$days=date('t',$firstday); 2.判断每月的第一天 ...
- Spring学习笔记之六(数据源的配置)
1.前言 上一篇博客分析了,Spring中实现AOP的两种动态代理的机制,以下这篇博客.来解说一下Spring中的数据源的配置. 2.DAO支持的模板类 Spring提供了非常多关于Dao支持的模板 ...
- JS实现鼠标经过用户头像显示资料卡的效果,可点击
基于项目的须要.须要制作出例如以下的一种页面效果:当用户鼠标经过好友列表中好友头像时,显示该好友的基本资料.事实上也就是类似QQclient的那种功能. 网上找了非常多代码,基本都实现了鼠标悬浮之后弹 ...