C#文件(夹)在ftp服务器间的同步

  1 #region 将文件(夹)1从ftp服务器1移到ftp服务器2文件(夹)2
  2         /// <summary>
  3         /// 将文件夹1从ftp服务器1移到ftp服务器2文件夹2
  4         /// </summary>
  5         /// <param name="sFtpUriD">源ftp url:ftp://ip+port</param>
  6         /// <param name="sFilePathD">源ftp 文件路径:/xxx/xxx/xxx</param>
  7         /// <param name="sFtpUserD">源ftp用户名</param>
  8         /// <param name="sFtpPwdD">源ftp密码</param>
  9         /// <param name="sFtpUriU">目的ftp url:ftp://ip+port</param>
 10         /// <param name="sFilePathU">目的ftp 文件路径:/xxx/xxx/xxx</param>
 11         /// <param name="sFtpUserU">目的ftp用户名</param>
 12         /// <param name="sFtpPwdU">目的ftp密码</param>
 13         /// <returns></returns>
 14         public bool MoveFolderOnDiffFtp(string sFtpUriD, string sFolderPathD, string sFtpUserD, string sFtpPwdD,
 15             string sFtpUriU, string sFolderPathU, string sFtpUserU, string sFtpPwdU)
 16         {
 17             //获取文件夹中的详细文件列表信息(包括文件大小信息)
 18             string[] sFileNameArr = GetFileList(sFtpUriD + sFolderPathD, WebRequestMethods.Ftp.ListDirectoryDetails, sFtpUserD, sFtpPwdD);
 19             //判断是否为单个文件
 20             if (sFileNameArr.Length <= 2)       //文件夹中存在单文件
 21             {
 22                 //在ftp服务器2上创建文件夹
 23                 FtpCheckDirectoryExist(sFtpUriU + "/", sFolderPathU + "/", sFtpUserU, sFtpPwdU);
 24
 25                 if (sFileNameArr[sFileNameArr.Length - 1] == "")
 26                 {
 27                     string[] onlyname = GetFileList(sFtpUriD + sFolderPathD, WebRequestMethods.Ftp.ListDirectory, sFtpUserD, sFtpPwdD);
 28                     foreach (string onlynames in onlyname)
 29                     {
 30                         if (onlynames == "" || onlynames == " ")
 31                         {
 32                             break;
 33                         }
 34                         else
 35                         {
 36                             MoveFileOnDiffFtp(sFtpUriD, sFolderPathD + "/" + onlynames, sFtpUserD, sFtpPwdD,
 37                                 sFtpUriU, sFolderPathU + "/" + onlynames, sFtpUserU, sFtpPwdU);
 38                             break;
 39                         }
 40                     }
 41                 }
 42             }
 43             else        //文件夹中存在多文件或子文件夹
 44             {
 45                 //在ftp服务器2上创建文件夹
 46                 FtpCheckDirectoryExist(sFtpUriU + "/", sFolderPathU + "/", sFtpUserU, sFtpPwdU);
 47
 48                 foreach (string sFileName in sFileNameArr)
 49                 {
 50                     //判断是否具有文件夹标识<DIR>
 51                     if (sFileName.Contains("<DIR>"))
 52                     {
 53                         string sInnerFloder = sFileName.Split(new string[] { "<DIR>" }, StringSplitOptions.None)[1].Trim();
 54
 55                         MoveFolderOnDiffFtp(sFtpUriD, sFolderPathD + "/" + sInnerFloder, sFtpUserD, sFtpPwdD,
 56                             sFtpUriU, sFolderPathU + "/" + sInnerFloder, sFtpUserU, sFtpPwdU);    //递归文件夹中的子文件夹
 57                     }
 58                     else
 59                     {
 60                         string[] onlyname = GetFileList(sFtpUriD + sFolderPathD, WebRequestMethods.Ftp.ListDirectory, sFtpUserD, sFtpPwdD);
 61                         foreach (string onlynames in onlyname)
 62                         {
 63                             if (onlynames == "" || onlynames == " " || sFileName == "")
 64                             {
 65                                 break;
 66                             }
 67                             else
 68                             {
 69                                 if (sFileName.Contains(" " + onlynames))
 70                                 {
 71                                     MoveFileOnDiffFtp(sFtpUriD, sFolderPathD + "/" + onlynames, sFtpUserD, sFtpPwdD,
 72                                         sFtpUriU, sFolderPathU + "/" + onlynames, sFtpUserU, sFtpPwdU);
 73                                     break;
 74                                 }
 75                             }
 76                         }
 77                     }
 78                 }
 79             }
 80
 81             return true;
 82         }
 83         /// <summary>
 84         /// 将文件从ftp服务器1移到ftp服务器2文件
 85         /// </summary>
 86         /// <param name="sFtpUriD">源ftp url:ftp://ip+port</param>
 87         /// <param name="sFilePathD">源ftp 文件路径:/xxx/xxx/xxx</param>
 88         /// <param name="sFtpUserD">源ftp用户名</param>
 89         /// <param name="sFtpPwdD">源ftp密码</param>
 90         /// <param name="sFtpUriU">目的ftp url:ftp://ip+port</param>
 91         /// <param name="sFilePathU">目的ftp 文件路径:/xxx/xxx/xxx</param>
 92         /// <param name="sFtpUserU">目的ftp用户名</param>
 93         /// <param name="sFtpPwdU">目的ftp密码</param>
 94         /// <returns></returns>
 95         public bool MoveFileOnDiffFtp(string sFtpUriD, string sFilePathD, string sFtpUserD, string sFtpPwdD,
 96             string sFtpUriU, string sFilePathU, string sFtpUserU, string sFtpPwdU)
 97         {
 98             try
 99             {
100                 //在目的ftp服务器上创建文件夹
101                 string sFolderPathU = sFilePathU.Substring(0, sFilePathU.LastIndexOf("/"));
102                 FtpCheckDirectoryExist(sFtpUriU + "/", sFolderPathU + "/", sFtpUserU, sFtpPwdU);
103
104                 //1.从源ftp服务器1下载(口语)
105                 FtpWebRequest reqFtpDownload;
106
107                 reqFtpDownload = (FtpWebRequest)FtpWebRequest.Create(new Uri(sFtpUriD + sFilePathD));
108                 reqFtpDownload.Credentials = new NetworkCredential(sFtpUserD, sFtpPwdD);
109                 reqFtpDownload.Method = WebRequestMethods.Ftp.DownloadFile; //下载方法
110                 reqFtpDownload.KeepAlive = false;
111                 reqFtpDownload.UseBinary = true;
112                 reqFtpDownload.Proxy = null;
113
114                 FtpWebResponse response = (FtpWebResponse)reqFtpDownload.GetResponse();
115
116                 //将从服务器1下载的响应流直接作为上传到服务器2的上传流
117                 Stream stream = response.GetResponseStream();
118
119                 //2.上传到目的ftp服务器2(题库)
120                 FtpWebRequest reqFTPUpload;
121
122                 reqFTPUpload = (FtpWebRequest)FtpWebRequest.Create(new Uri(sFtpUriU + sFilePathU));
123                 reqFTPUpload.Credentials = new NetworkCredential(sFtpUserU, sFtpPwdU);
124                 reqFTPUpload.Method = WebRequestMethods.Ftp.UploadFile; //上传方法
125                 reqFTPUpload.KeepAlive = false;
126                 reqFTPUpload.UseBinary = true;
127                 reqFTPUpload.Proxy = null;
128
129                 int buffLength = 2048;  //每次读入文件流2kb
130                 byte[] buff = new byte[buffLength];
131
132                 Stream requestStream = reqFTPUpload.GetRequestStream();
133                 int len = stream.Read(buff, 0, buff.Length);  //文件大小
134
135                 while (len > 0)
136                 {
137                     requestStream.Write(buff, 0, len);
138                     len = stream.Read(buff, 0, buffLength);
139                 }
140
141                 stream.Close();
142                 requestStream.Close();
143                 stream.Dispose();//释放资源
144                 requestStream.Dispose();//释放资源
145
146                 string sErr = "文件同步成功:" + sFtpUriD + sFilePathD;
147                 WriteError(sErr);
148
149                 return true;
150             }
151             catch (Exception ex)
152             {
153                 ex.ToString();
154                 string sErr = "文件同步失败:" + sFtpUriD + sFilePathD;
155                 WriteError(sErr);
156                 return false;
157             }
158         }
159         /// <summary>
160         /// 获取ftp上文件夹中的文件(夹)列表信息
161         /// </summary>
162         /// <param name="sFloderPath">ftp路径</param>
163         /// <param name="type">获取列表的类型(详细或只有文件名)</param>
164         /// <param name="sFtpUser">ftp用户名</param>
165         /// <param name="sFtpPwd">ftp密码</param>
166         /// <returns></returns>
167         private string[] GetFileList(string sFloderPath, string type ,string sFtpUser,string sFtpPwd)
168         {
169             WebResponse webresp = null;
170             StreamReader ftpFileListReader = null;
171             FtpWebRequest ftpRequest = null;
172             StringBuilder str = new StringBuilder();
173
174             try
175             {
176                 ftpRequest = (FtpWebRequest)WebRequest.Create(new Uri(sFloderPath));
177                 ftpRequest.Credentials = new NetworkCredential(sFtpUser, sFtpPwd);
178                 ftpRequest.Method = type;
179                 webresp = ftpRequest.GetResponse();
180                 ftpFileListReader = new StreamReader(webresp.GetResponseStream(), Encoding.UTF8);
181
182                 string line = ftpFileListReader.ReadLine();
183                 while (line != null)
184                 {
185                     str.Append(line);
186                     str.Append("/n");
187                     line = ftpFileListReader.ReadLine();
188                 }
189             }
190             catch (Exception ex)
191             {
192                 WriteError(ex.ToString());
193             }
194
195             return str.ToString().Split(new string[] { "/n" }, StringSplitOptions.None);
196         }
197
198         #endregion
时间: 2024-11-11 15:37:22

C#文件(夹)在ftp服务器间的同步的相关文章

PHP递归复制文件夹以及传输文件夹到其他服务器。

项目中需要复制整个文件夹,有时候还需要将整个文件夹传输到远程服务器. 这里就要递归遍历整个文件夹了,想看递归遍历文件夹的代码. function deepScanDir($dir) { $fileArr = array (); $dirArr = array (); $dir = rtrim($dir, '//'); if (is_dir($dir)) { $dirHandle = opendir($dir); while (false !== ($fileName = readdir($dir

Win7 自带FTP将文件复制到FTP服务器时发生错误。

错误截图: 错误信息: 将文件复制到FTP服务器时发生错误.请检查是否有权限将文件放到该服务器上. 详细信息: 200 Type set to I. 200 PORT commad successful. 451 No mapping for the Unicode character exits in target multi-bye code page. 解决方案: 控制面板-->管理工具-->打开Internet信息服务(IIS)管理器.右键选中自己建立好的FTP站点,选择"管

Rsync服务配置详解,实现服务器间数据同步!

1.1 什么是rsync? rsync是Unix下的一款应用软件,它能同步更新两处计算机的文件与目录,并适当利用差分编码以减少数据传输.rsync中一项与其他大部分类似程序或协议中所未见的重要特性是镜像对每个目标只需要一次传送.rsync可拷贝/显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝. 在常驻模式(daemon mode)下,rsync默认监听TCP端口873,以原生rsync传输协议或者通过远程shell如RSH或者SSH伺服文件.SSH情况下,rsync客户端运行程序必须同

将文件复制到FTP服务器时发生错误的解决办法

自己新搭了一台FTP服务器,给部门同事一起用,用ftp软件上传文件没什么问题,直接通过windows的界面上传文件出现如下提示应该是文件传输编码有问题远程到ftp服务器打开IIS选择正在使用的ftp站点选择高级设置在弹出的对话框中允许UTF8,默认是True,设置为False确定设置完成后重启一下ftp站点,就可以了 原文地址:http://blog.51cto.com/lisiyun/2300417

每日一记:文件服务器之FTP服务器

FTP(File transfer protocol):最主要的功能是在服务器与客户端之间进行档案的传输,使用的是明码传输方式 FTP服务器软件提供的不同等级的用户身份:user.guest.anonymous三种身份的权限和功能有差异FTP可以利用系统的syslogd来进行数据的记录,记录的数据包括用户曾经下达过的命令与用户传输数据的记录FTP可以限制用户仅能在自己的家目录当中活动,登入FTP后,显示的 [根目录]就是自己家目录的内容,这种环境称为change root,简称chrootFTP

将文件复制到ftp服务器时发生错误

这个问题是由于FTP底层文件传输协议文件名代码转化不一致导致的. 解决方法:将文件重新命名为纯英文或者数字或者英文数字组合字符,中文命名必须使用偶数字符,奇数中文字符+中文字符会导致传输失败.(自己可以尝试不同的字符组合以获得经验) 这种问题出现在安卓手机上,很多人希望通过WIFI使用FTP协议无线向手机中传入数据,由于windows与linux之间的FTP文件名限制导致上述错误的产生.该问题属系统兼容性故障,较难解决(几乎无法根本解决,只能通过用户修改文件名).很难评定是windows系统的问

FTP上传指定文件夹及其文件到服务器

1.在服务器端的IIS上建立一个FTP站点 注意事项:路径关联到你要存放(上传内容)的文件夹名称: 指定这个FTP站点的ip地址和端口号 2.本地准备代码 -------------------------------2.1上传类--------------------------------------------------------- public class Up    {        /// <summary>        ///   上传文件菜单        /// <

管理共享文件夹和使用FTP服务器

DAY04Windows 实验一 实验名称:创建共享通过UNC及映射网络驱动器访问 实验描述:在一台主机上创建共享文件夹,让同一网络的其他主机能够访问共享的文件夹 实验拓扑: 实验步骤 步骤一:在一台主机上建立文件夹-右击属性-共享-高级共享-共享此文件夹-权限-添加用户a-赋予权限-确定 步骤二:登录另一台主机-启用网络发现-在资源管理器里面输入\\服务器IP\共享名-输入用户名和密码-可以查看到服务器共享的文件夹内容 步骤三:登录客户机端-输入\\服务器IP-输入账号和密码-选择要映射的文件

beyond compare ftp 文件夹同步

因为经常要同步服务器上的代码,今天试了一下beyond compare 的ftp同步非常爽.以前都只用了beyond compare的文件夹比较功能了,ftp功能没有使用过. 步骤1:点击:会话-->新建会话-->文件夹同步 步骤2:点击下面的红色按键 步骤3:选择好ftp服务器的相关目录. 步骤4:选择右侧比较文件夹,选择比较规则,同步规则 步骤5:接下来就会列举出两边目录的差异了,点击"现在同步"就可以把左侧的目录同步了 beyond compare ftp 文件夹同步