最近公司新的软件控制系统需要,客户端包含的软件课程能够自动从服务端对比并同步,软件呢是一个免安装的文件夹,鉴于下载文件夹比较麻烦,所以我改成了自动同步文件夹的压缩包,这样下载比较方便,等客户端下载好以后再自行解压,(注:我就是给服务器设置了一个不需要账户密码的共享文件夹,所已下载时只需要输入服务器ip跟相对路径就可以了),下边是同步代码
最近公司新的软件控制系统需要,客户端包含的软件课程能够自动从服务端对比并同步,软件呢是一个免安装的文件夹,鉴于下载文件夹比较麻烦,所以我改成了自动同步文件夹的压缩包,这样下载比较方便,等客户端下载好以后再自行解压,(注:我就是给服务器设置了一个不需要账户密码的共享文件夹,所已下载时只需要输入服务器ip跟相对路径就可以了),下边是同步代码 [code]csharpcode: using ICSharpCode.SharpZipLib.Zip; using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading; using UnityEngine; public class SynUpdateCourse : MonoBehaviour { //文件夹名称遍历 public List<string> names = new List<string>(); //文件名称(包含路径) public List<string> fileNames = new List<string>(); void OnGUI() { if (GUI.Button(new Rect(0,0,200,60),"下载")) { fileNames = GetSpecificTypeFile("//IP地址/相对路径","zip"); td = new Thread(Download); td.Start(); } } Thread td; //本地文件路径 string localPath = @"E:/同步测试"; void Download() { List<string> localFile = Director(localPath);//获取本地当前已存在的课程名称组合 for (int i = 0; i < fileNames.Count; i++) { string fileName = Path.GetFileName(fileNames[i]);//提取下载的文件名包括后缀 string[] str = fileName.Split('.');//提取文件名(去除后缀) UnityEngine.Debug.Log(str[0]); if (!localFile.Contains(str[0]))//如果本地课程列表不包含服务端的文件 { File.Copy(fileNames[i], localPath + "/" + fileName);//从服务端复制到本地 } } UnityEngine.Debug.Log("下载完成"); td.Abort(); } /// <summary> /// 获取文件夹下的文件夹名称列表 /// </summary> /// <param name="path">文件夹路径</param> /// <returns></returns> public static List<string> Director(string path) { List<string> fileName = new List<string>(); DirectoryInfo d = new DirectoryInfo(path); DirectoryInfo[] directs = d.GetDirectories();//文件夹 //获取子文件夹内的文件列表,递归遍历 foreach (DirectoryInfo dd in directs) { fileName.Add(dd.Name); } return fileName; } /// <summary> /// 获取特定类型文件 /// </summary> /// <param name="path">查询目录路径</param> /// <param name="type">类型</param> public List<string> GetSpecificTypeFile(string path,string type) { return Directory.GetFiles(path,"*."+type).ToList(); } }