最近公司新的软件控制系统需要,客户端包含的软件课程能够自动从服务端对比并同步,软件呢是一个免安装的文件夹,鉴于下载文件夹比较麻烦,所以我改成了自动同步文件夹的压缩包,这样下载比较方便,等客户端下载好以后再自行解压,(注:我就是给服务器设置了一个不需要账户密码的共享文件夹,所已下载时只需要输入服务器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();
    }
  
}
   

  

posted on 2021-10-09 18:59  陌洛  阅读(44)  评论(0编辑  收藏  举报