c#同步两个子目录文件示例分享两个文件夹同步
usingSystem;
usingSystem.Collections.Generic;
usingSystem.IO;
usingSystem.Text;
usingSystem.Text.RegularExpressions;
namespaceAutoSync
{
publicclassNewDirectory
{
publicstaticDictionary<string,string>GetDirectories(stringdirname)
{
Dictionary<string,string>dirs=newDictionary<string,string>();
string[]strDirs=Directory.GetDirectories(dirname);
foreach(stringstrinstrDirs)
{
string[]result=str.Split("\\");
dirs.Add(result[result.Length-1],result[result.Length-1]);
}
returndirs;
}
}
}
usingSystem;
usingSystem.Collections.Generic;
usingSystem.IO;
usingSystem.Text;
namespaceAutoSync
{
enumSyncResult
{
Success,SourceDirNotExists,DestDirNotExists
}
classFloderSync
{
publicintCreateDirCount=0;
publicintCopyFileCount=0;
publicList<string>Log=newList<string>();
privatevoidAddLog(stringlogtext)
{
if(Log.Count<1000)
Log.Add(System.DateTime.Now.ToString()+logtext);
elseif(Log.Count==1000)
Log.Add(System.DateTime.Now.ToString()+" 达到日志上限,不再追加");
}
publicSyncResultStartSync(stringsourcedir,stringdestdir)
{
//传入目录名保护
sourcedir=sourcedir.Trim();
destdir=destdir.Trim();
//保证目录最后一个字符不是斜杠
if(sourcedir[sourcedir.Length-1]=="\\")
sourcedir=sourcedir.Remove(sourcedir.Length-1);
if(destdir[destdir.Length-1]=="\\")
destdir=destdir.Remove(destdir.Length-1);
//判断目录是否存在
if(!Directory.Exists(sourcedir))returnSyncResult.SourceDirNotExists;
if(!Directory.Exists(destdir))returnSyncResult.DestDirNotExists;
//获取源、目的目录内的目录信息
Dictionary<string,string>SDirInfo=newDictionary<string,string>();
Dictionary<string,string>DDirInfo=newDictionary<string,string>();
Dictionary<string,string>aa=newDictionary<string,string>();
SDirInfo=NewDirectory.GetDirectories(sourcedir);//获取源目录的目录信息
DDirInfo=NewDirectory.GetDirectories(destdir);//获取目标目录的目录信息
//
// 开始同步两个目录,但只先同步源目录信息
//------比较两目录中的子目录信息---------------------
foreach(KeyValuePair<string,string>kvpinSDirInfo)//在查找有无源目录存在而在目标目录中不存在的目录
{
if(!DDirInfo.ContainsKey(kvp.Key))//如果目标目录中不存在目录,则马上建立
{
stringdirname=destdir+"\\"+kvp.Key;
Directory.CreateDirectory(dirname);
AddLog(" 创建目录:"+dirname);
CreateDirCount++;
}
//递归调用目录同步函数,实现嵌套目录一次性全同步
StartSync(sourcedir+"\\"+kvp.Key,destdir+"\\"+kvp.Key);
}
//取得源目录下所有文件的列表
string[]SFiles=Directory.GetFiles(sourcedir);
//string[]DFiles=Directory.GetFiles(destdir);
//------比较两目录中的文件信息(本层目录)--------------
foreach(stringsfilenameinSFiles)
{
stringdfilename=destdir+"\\"+Path.GetFileName(sfilename);
if(File.Exists(dfilename))//如果目的目录中已经存在同名文件,则比较其最后修改时间,取最新的为准
{
//取得源、目的目录中同名文件的文件信息
FileInfosfi=newFileInfo(sfilename);
FileInfodfi=newFileInfo(dfilename);
//如果源文件大于目的文件修改时间5秒以上才拷贝覆盖过去,主要是考虑到操作系统的一些差异,对于修改时间相同而文件大小不同的文件则暂不处理
if(sfi.LastWriteTime>dfi.LastWriteTime.AddSeconds(5))
{
//拷贝源目录下的同名文件到目的目录
File.Copy(sfilename,dfilename,true);
AddLog(" 覆盖文件:"+dfilename);
CopyFileCount++;
}
}
else//如果目的目录中不存在同名文件,则拷贝过去
{
//拷贝源目录下的同名文件到目的目录
File.Copy(sfilename,dfilename,true);
AddLog(" 拷贝文件:"+dfilename);
CopyFileCount++;
}
}
returnSyncResult.Success;
}
}
}
相关文章
- C#调用Python方式
- C#操作INI文件的案例分享
- MD5加密(java和c#)详解程序员
- C操作MySQL数据库实现数据集查询(c# mysql 数据集)
- C#声明方法实例说明
- c#调用.bat文件的实现代码
- sealed在C#中的作用说明
- C#.net格式化时间字符串达到不同的显示效果
- C#下载文件(TransmitFile/WriteFile/流方式)实例介绍
- C#中Array与ArrayList用法及转换的方法
- asp.netC#实现下载文件的六种方法实例
- 深入分析C#异步编程详解
- C#操作config文件的具体方法
- asp.netC#生成和解析二维码的实例代码
- C#获取全部目录和文件的简单实例
- c#的异或运算符介绍
- c#实现ini文件读写类分享
- C#删除文件夹和文件到回收站示例
- c#对xml增删改查操作示例
- C#文件操作的简单实例
- c#文件的I/O基本操作
- c#实现把异常写入日志示例(异常日志)
- C#中String与string的区别分析
- C#中实现在32位、64位系统下自动切换不同的SQLitedll文件