using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Common.Files
{
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();
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 (Exception ex)
{
try
{
File.Delete(string.Format("{0}\\{1}", dir.Length > 0 ? (dir.Replace(olddirectory, newdirectory)) : (newdirectory), fi.Name));
//string temp = ex.Message;
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)
{
bool state = false;
DeleteDirectoryAndFiles(directory);
return state;
}
/// <summary>
///
/// </summary>
/// <param name="path"></param>
protected void DeleteDirectoryAndFiles(string path)
{
DirectoryInfo di = new DirectoryInfo(path);
if (di.GetFiles().Length > 0)
DeleteFiles(path);
DirectoryInfo[] dis = di.GetDirectories();
if (dis.Length > 0)
{
foreach (DirectoryInfo tempdi in dis)
{
DeleteDirectoryAndFiles(tempdi.FullName);
if (tempdi.GetFiles().Length < 1 && tempdi.GetDirectories().Length < 1)
tempdi.Delete();
}
}
}
/// <summary>
/// 删除文件夹的所有文件
/// </summary>
/// <param name="path"></param>
protected void DeleteFiles(string path)
{
DirectoryInfo di = new DirectoryInfo(path);
FileInfo[] fis = di.GetFiles();
foreach (FileInfo fi in fis)
{
try
{
fi.Delete();
}
catch
{
continue;
}
}
}
}
}
分享到:
相关推荐
一、功能描述: 该软件只负责改掉过的文件,对于查找哪些文件被修改过使用非常方便。 特别适用于软件开发后期的维护工作,快速搜索...四、下载包中含有C#源码,对文件夹递归批量操作处理,是学习C#文件夹操作有帮助
递归(c#.net源码).rar 递归(c#.net源码).rar 递归(c#.net源码).rar 递归(c#.net源码).rar
关于sharpziplib的压缩,网上的文档很多,虽然有支持文件夹压缩的,但总都有这样或者那样的问题,或者不支持文件夹的递归, 这个源码是是我费半天功夫调试出来的,支持文件 文件夹的递归。
C#递归遍历固定磁盘源码:递归遍历本机所有固定磁盘,可自定义排除目录,避免运行异常,并将所有文件、文件夹信息写入文本文件。
一个基于C#实现的递归法生成的树型菜单的程序源码。
已知问题:不支持空文件的压缩 支持:1.多重文件夹压缩 2.解决不用从根目录压缩,即如果压缩的是C:\a\b\c\d ,压缩成C:\x.zip,打开看到的是d\....而非a\b\c\d\... 本代码基于xjzdr的代码上修改,主要修改了压缩...
C#递归计算求阶乘和求年龄实例源码 1、n!=n*(n-1)*(n-2)*......*3*2*1 n!=n*(n-1)! 2、 趣味问题——年龄。有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个...
VS.net C# 二叉树递归实现 源码
C#纯手写的可以浏览计算机内所有...里面用到了递归调用和C#中的File,FileInfo,Directory,DirectoryInfo,HashSet泛型,List泛型等类。实际应用不大,仅作为源码学习用,想学文档操作的朋友可以下回去看看,2分不贵。
C# 递归生成树型菜单,源码中包含了数据库,可直接可运行程序,代码有注释,易懂
c#非递归求解迷宫最短路径。源码编写visual studio 2005
C#递归显示数据到TreeView 测试可用
C#文档:二叉树、父子关系树(BOM常见存储形式)递归遍历取数并用树形结构显示方法;包含dbHelpSql类。复制代码运行DBConfig窗体链接数据库,表结构见“表结构.SQL”文档。
C# 实现汉诺塔问题 递归+Recursion 本人收藏了3年的资源 现放出 都是总结了很多系统 软件项目实施过程中的经验的 慢慢积累的
.net递归算法优化源码案例
//设定生成树的原始数据 ...//调用递归函数在treeView1里面显示给出数据的树形图 private void button1_Click(object sender, EventArgs e) { treeView1.Nodes.Clear(); AddTree(0, (TreeNode)null); }
可以支持大数的阶乘,采用arrsylist的存储方式实现,非递归算法。
C# 基础学习案例源码(32套源码案例) CS_01你好世界 CS_02输入和输出 CS_03异常捕获 CS_04字符串拼装 CS_05枚举 CS_06数组 CS_07二维数组 CS_08交错数组 CS_09值类型和引用类型 CS_10特殊的引用类型string CS_11...
C#源码简单的递归实现计算多个筛子出现的点数所概率分布。
c# 桌面软件, 文字检索处理,带几十万字词数据库,0.1秒以下检索速度优化,递归算法控件状态保存和载入。图片添加删除移动缩放处理。自定义控件添加删除移动等使用。用一个xml当数据库文件。提供源代码。