首页 新闻 赞助 找找看

访问UNIX系统上的FTP,路径出现变化。

0
悬赏园豆:80 [已关闭问题] 关闭于 2011-10-28 21:55

用C#写的FTP访问程序,要访问并获取一个FTP上的文件。

FTP服务器的系统是UNIX Type: L8 Version: BSD-44。

访问程序如下:

1 /// <summary>
2 /// 检查文件是否存在,如果存在则返回文件列表
3 /// </summary>
4 /// <param name="dirUrl">FTP路径</param>
5 /// <param name="anonymous">是否匿名访问</param>
6 /// <param name="ftpUserName">FTP用户名</param>
7 /// <param name="ftpPwd">FTP密码</param>
8 /// <returns></returns>
9   private string[] GetFileList(string dirUrl, bool anonymous, string ftpUserName, string ftpPwd)
10 {
11 StringBuilder result = new StringBuilder();
12
13 FtpWebRequest reqFTP;
14 try
15 {
16 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(dirUrl));
17 reqFTP.UseBinary = true;
18 if (anonymous)
19 {
20 reqFTP.Credentials = CredentialCache.DefaultNetworkCredentials;
21 }
22 else
23 {
24 reqFTP.Credentials = new NetworkCredential(ftpUserName, ftpPwd);
25 }
26
27 reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
28 //reqFTP.Timeout = 10000;
29 //reqFTP.ReadWriteTimeout = 30000;
30   IData_MonitorLogFacade facade = BeanObjects.DataMonitorLogFacade;
31
32 using (WebResponse response = reqFTP.GetResponse())
33 {
34 using (StreamReader reader = new StreamReader(response.GetResponseStream()))
35 {
36 string line = reader.ReadLine();
37 while (line != null)
38 {
39 string pattern = dataDir.RetrievePattern.Replace(".", @"\.").Replace("*", ".*").Replace("?", ".?");
40 Regex reg = new Regex(pattern);
41 if (reg.IsMatch(line))
42 {
43 if (!facade.FileExists(line, dataDir.Id))
44 {
45 result.Append(dirUrl + "/" + line);
46 result.Append("\n");
47 }
48 }
49 line = reader.ReadLine();
50 }
51 // to remove the trailing '\n'
52   if (result.Length > 0)
53 result.Remove(result.ToString().LastIndexOf('\n'), 1);
54 reader.Close();
55 }
56 response.Close();
57 }
58 if (result.Length <= 0) return new string[0];
59
60 return result.ToString().Split('\n');
61 }
62 catch (Exception ex)
63 {
64 throw ex;
65 }
66 }

用来访问WINDOWS系统的FTP就没有问题,我有个放在Godaddy的windows的.net空间,测试通过,可以获取到文件列表。但当我测试客户的FTP服务器时,却总提示文件路径不存在。检查后发现,这个UNIX上的FTP路径会更改,比如FTP路径是这样

ftp://123.123.123.123/data/latest 

使用FlashFXP的ftp工具来访问,可以正常的登录和操作,但却发现在FlashFXP界面中,显示的路径不跟原来的一样。FlashFXP不会显示前面的IP地址,所以

正常情况下路径应该显示为:/data/latest
但实际上却是显示:    /rmsvc/rsch/data/latest

很明显就是这个UNIX上的FTP服务器对路径做了跳转,导致我的程序无法访问到正确路径。但是我不可以写死FTP路径,应该路径可能会有变动。

请问高手,该如何解决?

问题补充:

还有个奇怪的问题,就算我在浏览器,或者文件夹的地址栏中直接输入:

ftp://123.123.123.123/data/latest

也一样不能访问,没有弹出输入用户密码的对话框。

为什么用LeapFTP,FlashFTP就可以访问呢。

wildfire555的主页 wildfire555 | 初学一级 | 园豆:190
提问于:2011-08-12 00:47
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册