none
C# 操作unix ftp失败 RRS feed

  • 问题

  • FtpWebRequest request = this.CreateRequest(filedir);
    request.Method = WebRequestMethods.Ftp.ListDirectory;
    FtpWebResponse response = null;
    try
    {
    response = (FtpWebResponse)request.GetResponse();
    if(response !=null)
    response.Close();
    }
    catch (WebException we1)
    {
    if (we1.Status == WebExceptionStatus.ProtocolError)
    {
    //命令错误
    }
    if(response !=null)
    response.Close();
    //此时没有该目录,需要创建
    request = this.CreateRequest(filedir);
    request.Method = WebRequestMethods.Ftp.MakeDirectory;
    try
    {
    response = (FtpWebResponse)request.GetResponse();
    }
    catch (WebException e)
    {
    throw new IOException("创建目录失败!"+e.Message);
    }


    filedir是我要创建的目录,先用listdirectory来看是否有目录,如果没有则创建,在windows上一切正常,
    可是在Sun的unix服务器上,filedir这个目录存在的情况下,listdirectory也报异常,走入创建目录的分支,
    导致程序崩溃,报出创建目录失败的错误,请问C#在windows,unix上的程序有什么需要区别对待的地方吗?
    2010年3月23日 10:01

答案

  • 搞好了,

     //request.Method = WebRequestMethods.Ftp.ListDirectory;

      request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;

    改用ListDirectoryDetails就好了,神奇,难道unix不支持listDirectory的命令?

     

    不知道了,反正问题解决了暂时

     

    2010年3月23日 10:31

全部回复

  • 您的 filedir 是什么值?UNIX 服务器的 FTP 是什么版本,Encoding 是什么?采用什么模式 (PASSV 或主动)?是否允许匿名登录?是否接受 Unicode 字符?
    Mark Zhou
    2010年3月23日 10:08
  • filedir = "ftp://192.168.36.126:21/clientfile/2/" unix服务器的版本我就不知道了,我觉得windows上程序正常,unix上对空目录进行listdirectory出错,可能是一个通用的问题吧?
    2010年3月23日 10:12
  • 估计是权限问题,unix服务器上建立的目录默认是没有权限的,你得用权限命令加上权限。
    霸王
    2010年3月23日 10:17
  • 其实如果 Send 对了命令的话不管 Windows 或者 Unix 都一样的。FTP 协议的命令格式都是标准的。

    关键是您的 LiST -al 命令可能没有被正确 Send。

    所以我严重怀疑是编码问题。正如我问到的那样,您可否提供相关信息?


    Mark Zhou
    2010年3月23日 10:18
  • 搞好了,

     //request.Method = WebRequestMethods.Ftp.ListDirectory;

      request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;

    改用ListDirectoryDetails就好了,神奇,难道unix不支持listDirectory的命令?

     

    不知道了,反正问题解决了暂时

     

    2010年3月23日 10:31