国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

c#同步兩個子目錄文件示例分享 兩個文件夾同步

2020-01-24 02:53:57
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:

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;
        }
    }
}

復制代碼 代碼如下:

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 + "http://" + kvp.Key;
                    Directory.CreateDirectory(dirname);
                    AddLog("  創建目錄:" + dirname);

                    CreateDirCount++;
                }
                //遞歸調用目錄同步函數,實現嵌套目錄一次性全同步
                StartSync(sourcedir + "http://" + kvp.Key, destdir + "http://" + kvp.Key);
            }
            //取得源目錄下所有文件的列表
            string[] SFiles = Directory.GetFiles(sourcedir);
            //string[] DFiles = Directory.GetFiles(destdir);
            //------比較兩目錄中的文件信息(本層目錄)--------------
            foreach (string sfilename in SFiles)
            {
                string dfilename = destdir+"http://"+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;
        }
    }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平陆县| 班戈县| 金门县| 昌乐县| 明水县| 乌兰县| 米易县| 大竹县| 泗阳县| 德昌县| 长春市| 连江县| 贵阳市| 宁远县| 大方县| 广饶县| 郑州市| 青冈县| 康马县| 天峨县| 湟中县| 沙湾县| 京山县| 临城县| 剑阁县| 格尔木市| 东平县| 库车县| 大石桥市| 宜城市| 博兴县| 百色市| 犍为县| 杭州市| 乌拉特前旗| 平原县| 越西县| 皮山县| 乐东| 淳安县| 鄱阳县|