欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2014年01月15日 10:27:46   作者:  
這篇文章主要介紹了使用c#同步兩個子目錄文件的方法,大家參考使用吧

復(fù)制代碼 代碼如下:

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

復(fù)制代碼 代碼如下:

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() + "  達(dá)到日志上限,不再追加");
        }
        public SyncResult StartSync(string sourcedir, string destdir)
        {
            //傳入目錄名保護(hù)
            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;

            //獲取源、目的目錄內(nèi)的目錄信息
            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);//獲取目標(biāo)目錄的目錄信息
            //
            //      開始同步兩個目錄,但只先同步源目錄信息
            //------比較兩目錄中的子目錄信息---------------------
            foreach (KeyValuePair<string, string> kvp in SDirInfo) //在查找有無源目錄存在而在目標(biāo)目錄中不存在的目錄
            {
                if(!DDirInfo.ContainsKey(kvp.Key)) //如果目標(biāo)目錄中不存在目錄,則馬上建立
                {
                    string dirname=destdir + "\\" + kvp.Key;
                    Directory.CreateDirectory(dirname);
                    AddLog("  創(chuàng)建目錄:" + dirname);

                    CreateDirCount++;
                }
                //遞歸調(diào)用目錄同步函數(shù),實現(xiàn)嵌套目錄一次性全同步
                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)) //如果目的目錄中已經(jīng)存在同名文件,則比較其最后修改時間,取最新的為準(zhǔn)
                {
                    //取得源、目的目錄中同名文件的文件信息
                    FileInfo sfi = new FileInfo(sfilename);
                    FileInfo dfi = new FileInfo(dfilename);
                    //如果源文件大于目的文件修改時間5秒以上才拷貝覆蓋過去,主要是考慮到操作系統(tǒng)的一些差異,對于修改時間相同而文件大小不同的文件則暫不處理
                    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;
        }
    }
}

相關(guān)文章

  • c#如何實現(xiàn)程序加密隱藏

    c#如何實現(xiàn)程序加密隱藏

    LiteDB是一個輕量級的嵌入式數(shù)據(jù)庫,它是用C#編寫的,適用于.NET平臺,這篇文章主要介紹了如何通過LiteDB將自己的程序進(jìn)行加密,感興趣的可以了解下
    2023-08-08
  • C#不重復(fù)輸出一個數(shù)組中所有元素的方法

    C#不重復(fù)輸出一個數(shù)組中所有元素的方法

    這篇文章主要介紹了C#不重復(fù)輸出一個數(shù)組中所有元素的方法,涉及C#針對數(shù)組的遍歷、校驗及排序等操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • C#使用開源驅(qū)動連接操作MySQL數(shù)據(jù)庫

    C#使用開源驅(qū)動連接操作MySQL數(shù)據(jù)庫

    這篇文章主要介紹了C#使用開源驅(qū)動連接操作MySQL數(shù)據(jù)庫,本文講解使用SourceForge上的mysqldrivercs驅(qū)動連接操作MySQL數(shù)據(jù)庫,需要的朋友可以參考下
    2015-02-02
  • c# 如何用組合替代繼承

    c# 如何用組合替代繼承

    這篇文章主要介紹了c# 如何用組合替代繼承,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-02-02
  • C#將指定目錄所有文件名轉(zhuǎn)換成小寫的方法

    C#將指定目錄所有文件名轉(zhuǎn)換成小寫的方法

    這篇文章主要介紹了C#將指定目錄所有文件名轉(zhuǎn)換成小寫的方法,涉及C#中目錄的遍歷及filename.ToLowerInvariant方法的使用技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • C#泛型類創(chuàng)建與使用的方法

    C#泛型類創(chuàng)建與使用的方法

    這篇文章主要為大家詳細(xì)介紹了C#泛型類創(chuàng)建與使用的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • c# 數(shù)據(jù)標(biāo)注與數(shù)據(jù)校驗

    c# 數(shù)據(jù)標(biāo)注與數(shù)據(jù)校驗

    這篇文章主要介紹了c# 數(shù)據(jù)標(biāo)注與數(shù)據(jù)校驗的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-10-10
  • C++中#include頭文件的示例詳解

    C++中#include頭文件的示例詳解

    在C++中,所有的文件操作,都是以流(stream)的方式進(jìn)行的,fstream也就是文件流file stream。這篇文章主要介紹了C++中#include頭文件,需要的朋友可以參考下
    2020-02-02
  • WinForm的延時加載控件概述

    WinForm的延時加載控件概述

    這篇文章主要介紹了WinForm的延時加載控件,很實用的技巧,在C#程序設(shè)計中有著比較廣泛的應(yīng)用,需要的朋友可以參考下
    2014-08-08
  • c#線程同步使用詳解示例

    c#線程同步使用詳解示例

    這篇文章主要介紹了c#線程同步使用方法,介紹幾種常用的C#進(jìn)行線程同步的方式,需要的朋友可以參考下
    2014-02-02

最新評論