c#同步兩個(gè)子目錄文件示例分享 兩個(gè)文件夾同步
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() + " 達(dá)到日志上限,不再追加");
}
public SyncResult StartSync(string sourcedir, string destdir)
{
//傳入目錄名保護(hù)
sourcedir = sourcedir.Trim();
destdir = destdir.Trim();
//保證目錄最后一個(gè)字符不是斜杠
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)目錄的目錄信息
//
// 開始同步兩個(gè)目錄,但只先同步源目錄信息
//------比較兩目錄中的子目錄信息---------------------
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ù),實(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)存在同名文件,則比較其最后修改時(shí)間,取最新的為準(zhǔn)
{
//取得源、目的目錄中同名文件的文件信息
FileInfo sfi = new FileInfo(sfilename);
FileInfo dfi = new FileInfo(dfilename);
//如果源文件大于目的文件修改時(shí)間5秒以上才拷貝覆蓋過去,主要是考慮到操作系統(tǒng)的一些差異,對(duì)于修改時(shí)間相同而文件大小不同的文件則暫不處理
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;
}
}
}
- C#刪除文件目錄或文件的解決方法
- C#操作目錄與文件的方法步驟
- C#計(jì)算兩個(gè)文件的相對(duì)目錄算法的實(shí)例代碼
- C#獲取全部目錄和文件的簡(jiǎn)單實(shí)例
- c#使用filesystemwatcher實(shí)時(shí)監(jiān)控文件目錄的添加和刪除
- C#常用目錄文件操作類實(shí)例
- C#獲取項(xiàng)目指定目錄下文件的方法
- C#遍歷指定目錄下所有文件的方法
- C#實(shí)現(xiàn)最完整的文件和目錄操作類實(shí)例
- C#實(shí)現(xiàn)安全刪除文件目錄的方法
- C#讀取目錄下所有指定類型文件的方法
- C#實(shí)現(xiàn)Zip壓縮目錄中所有文件的方法
- C#如何打開并讀取usb的文件目錄
- C#文件目錄操作方法匯總
相關(guān)文章
C#不重復(fù)輸出一個(gè)數(shù)組中所有元素的方法
這篇文章主要介紹了C#不重復(fù)輸出一個(gè)數(shù)組中所有元素的方法,涉及C#針對(duì)數(shù)組的遍歷、校驗(yàn)及排序等操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08C#使用開源驅(qū)動(dòng)連接操作MySQL數(shù)據(jù)庫(kù)
這篇文章主要介紹了C#使用開源驅(qū)動(dòng)連接操作MySQL數(shù)據(jù)庫(kù),本文講解使用SourceForge上的mysqldrivercs驅(qū)動(dòng)連接操作MySQL數(shù)據(jù)庫(kù),需要的朋友可以參考下2015-02-02c# 數(shù)據(jù)標(biāo)注與數(shù)據(jù)校驗(yàn)
這篇文章主要介紹了c# 數(shù)據(jù)標(biāo)注與數(shù)據(jù)校驗(yàn)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下2020-10-10