源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

c#同步两个子目录文件示例分享 两个文件夹同步

  • 时间:2022-12-06 23:33 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:c#同步两个子目录文件示例分享 两个文件夹同步
[u]复制代码[/u] 代码如下:
using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Text.RegularExpressions; namespace AutoSync {     public class NewDirectory     {         public static Dictionary<string,string> GetDirectories(string dirname)         {             Dictionary<string, string> dirs = new Dictionary<string, string>();             string[] strDirs = Directory.GetDirectories(dirname);             foreach (string str in strDirs)             {                 string[] result = str.Split('\\');                 dirs.Add(result[result.Length-1], result[result.Length-1]);             }             return dirs;         }     } }
[u]复制代码[/u] 代码如下:
using System; using System.Collections.Generic; using System.IO; using System.Text; namespace AutoSync {     enum SyncResult     {         Success,SourceDirNotExists,DestDirNotExists     }     class FloderSync     {         public int CreateDirCount = 0;         public int CopyFileCount = 0;         public List<string> Log = new List<string>();         private void AddLog(string logtext)         {             if (Log.Count < 1000)                 Log.Add(System.DateTime.Now.ToString() + logtext);             else if (Log.Count == 1000)                 Log.Add(System.DateTime.Now.ToString() + "  达到日志上限,不再追加");         }         public SyncResult StartSync(string sourcedir, string destdir)         {             //传入目录名保护             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)) return SyncResult.SourceDirNotExists;             if (!Directory.Exists(destdir)) return SyncResult.DestDirNotExists;             //获取源、目的目录内的目录信息             Dictionary<string, string> SDirInfo = new Dictionary<string, string>();             Dictionary<string, string> DDirInfo = new Dictionary<string, string>();             Dictionary<string, string> aa = new Dictionary<string, string>();             SDirInfo = NewDirectory.GetDirectories(sourcedir);//获取源目录的目录信息             DDirInfo = NewDirectory.GetDirectories(destdir);//获取目标目录的目录信息             //             //      开始同步两个目录,但只先同步源目录信息             //------比较两目录中的子目录信息---------------------             foreach (KeyValuePair<string, string> kvp in SDirInfo) //在查找有无源目录存在而在目标目录中不存在的目录             {                 if(!DDirInfo.ContainsKey(kvp.Key)) //如果目标目录中不存在目录,则马上建立                 {                     string dirname=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 (string sfilename in SFiles)             {                 string dfilename = destdir+"\\"+Path.GetFileName(sfilename);                 if (File.Exists(dfilename)) //如果目的目录中已经存在同名文件,则比较其最后修改时间,取最新的为准                 {                     //取得源、目的目录中同名文件的文件信息                     FileInfo sfi = new FileInfo(sfilename);                     FileInfo dfi = new FileInfo(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++;                 }             }             return SyncResult.Success;         }     } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部