码迷,mamicode.com
首页 > Windows程序 > 详细

C#实现服务器间文件传输

时间:2015-11-23 19:18:37      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:c#实现服务器间文件传输

最近需要做站点迁移,但是服务器间拷贝站点,经常出问题,只要一按Ctrl+V,就报错。后来大家建议写个程序来实现批量拷贝,所以就展示下代码,讲下坑


界面

技术分享

代码:

 private void runbutton_Click(object sender, EventArgs e)
        {
            string srcIP = srctb.Text;
            string desIP = destb.Text;
            string siteListStr = sitelisttb.Text;
            string [] siteList = siteListStr.Split(‘;‘);
            logtb.Text = "";
            foreach(string site in siteList)
            {
                if (!site.Equals(""))
                {
                    StringBuilder log = FileUtils.CopySite(srcIP, desIP, site);
                    logtb.Text = logtb.Text + log;
                }
            }
        }


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CopySite
{
    public class FileUtils
    {
        public static StringBuilder CopySite(string srcIp, string desIp, string site)
        {         
            string srcpath = System.IO.Path.Combine("\\\\", srcIp, "WebSites", site);
            string despath = System.IO.Path.Combine("\\\\", desIp, "WebSites", site);
            bool overwrite=true; 
            StringBuilder log=new StringBuilder();
            CopyDir(srcpath, despath, overwrite, ref  log);
            return log;
        }
        public static void CopyDir(string srcpath, string despath, bool overwrite, ref StringBuilder log)
        {
            if (!Directory.Exists(srcpath))
            {
                log.AppendLine(srcpath+"不存在");
                return;
            }
            // 判断文件夹存不存在
            if (!Directory.Exists(despath))
            {
                Directory.CreateDirectory(despath);
                log.AppendLine( despath+"创建成功");
            }
            // 复制文件
            string[] files = System.IO.Directory.GetFiles(srcpath);
            foreach (string s in files)
            {
                //仅返回路径字符串的文件名及后缀
                string fileName = System.IO.Path.GetFileName(s);
                string destFile = System.IO.Path.Combine(despath, fileName);
                CopyFile(s, destFile, overwrite);
                log.AppendLine(destFile + "拷贝成功");
            }
            //复制Dir
            string[] dirs = Directory.GetDirectories(srcpath);
            foreach (string dir in dirs)
            {
                string dirName = System.IO.Path.GetFileName(dir);
                string newdespath = System.IO.Path.Combine(despath, dirName);
                CopyDir(dir, newdespath, overwrite, ref log);
            }
        }
        public static void CopyFile(string srcpath,string despath,bool overwrite)
        {
            File.Copy(srcpath, despath, overwrite);
        }
    }
}


假设:需要实现从A拷贝文件到B


坑1:在本地执行该代码,提示目标源访问不了

原因:我本机在上海的域中,源机子跟目标机子都在南通的域中,不同域之间访问存在问题(虽然手动是可以拷贝的)


坑2:把程序放到B机器上运行,还是报目标源访问不了

原因:A上有DMZ访问限制,所以B机器上代码访问不了A


正确解决方法:程序运行在A机器上,并且把B机器上要访问的目录设成共享目录

本文出自 “爱工作爱生活” 博客,转载请与作者联系!

C#实现服务器间文件传输

标签:c#实现服务器间文件传输

原文地址:http://4453154.blog.51cto.com/4443154/1716005

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!