首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

请大家帮写用socket检测FTP上目录/文件是否存在的代码,该怎么处理

2012-06-07 
请大家帮写用socket检测FTP上目录/文件是否存在的代码我从网上找了好些FTP的代码,测试了一下,就socket的最

请大家帮写用socket检测FTP上目录/文件是否存在的代码
我从网上找了好些FTP的代码,测试了一下,就socket的最快。其它的代码,不知为何,在第一次连接FTP时都慢,有时长达一分钟,之后还行。 用SOCKET的就没这问题。 
下面是找到的SOCKET操作FTP的源码,但是它没有检测ftp上的目录或文件是否存在的功能,而我很需要这个,能不能请大家帮写一下,谢谢。

using System;
using System.Net;
using System.IO;
using System.Text;
using System.Net.Sockets;
namespace FTP
{
  /// <summary>
  /// FTPClient 的摘要说明。
  /// </summary>
  public class FTPClient
  {
  #region 构造函数
  /// <summary>
  /// 缺省构造函数
  /// </summary>
  public FTPClient()
  {
  strRemoteHost = "";
  strRemotePath = "";
  strRemoteUser = "";
  strRemotePass = "";
  strRemotePort = 21;
  bConnected = false;
  } /// <summary>
  /// 构造函数
  /// </summary>
  /// <param name="remoteHost"></param>
  /// <param name="remotePath"></param>
  /// <param name="remoteUser"></param>
  /// <param name="remotePass"></param>
  /// <param name="remotePort"></param>
  public FTPClient(string remoteHost, string remotePath, string remoteUser, string remotePass, int remotePort)
  {
  strRemoteHost = remoteHost;
  strRemotePath = remotePath;
  strRemoteUser = remoteUser;
  strRemotePass = remotePass;
  strRemotePort = remotePort;
  Connect();
  }
  #endregion
  #region 登陆
  /// <summary>
  /// FTP服务器IP地址
  /// </summary>
  private string strRemoteHost;
  public string RemoteHost
  {
  get
  {
  return strRemoteHost;
  }
  set
  {
  strRemoteHost = value;
  }
  }
  /// <summary>
  /// FTP服务器端口
  /// </summary>
  private int strRemotePort;
  public int RemotePort
  {
  get
  {
  return strRemotePort;
  }
  set
  {
  strRemotePort = value;
  }
  }
  /// <summary>
  /// 当前服务器目录
  /// </summary>
  private string strRemotePath;
  public string RemotePath
  {
  get
  {
  return strRemotePath;
  }
  set
  {
  strRemotePath = value;
  }
  }
  /// <summary>
  /// 登录用户账号
  /// </summary>
  private string strRemoteUser;
  public string RemoteUser
  {
  set
  {
  strRemoteUser = value;
  }
  }
  /// <summary>
  /// 用户登录密码
  /// </summary>
  private string strRemotePass;
  public string RemotePass


  {
  set
  {
  strRemotePass = value;
  }
  } /// <summary>
  /// 是否登录
  /// </summary>
  private Boolean bConnected;
  public bool Connected
  {
  get
  {
  return bConnected;
  }
  }
  #endregion
  #region 链接
  /// <summary>
  /// 建立连接 
  /// </summary>
  public void Connect()
  {
  socketControl = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  IPEndPoint ep = new IPEndPoint(IPAddress.Parse(RemoteHost), strRemotePort);
  // 链接
  try
  {
  socketControl.Connect(ep);
  }
  catch (Exception)
  {
  throw new IOException("Couldn't connect to remote server");
  } // 获取应答码
  ReadReply();
  if (iReplyCode != 220)
  {
  DisConnect();
  throw new IOException(strReply.Substring(4));
  } // 登陆
  SendCommand("USER " + strRemoteUser);
  if (!(iReplyCode == 331 || iReplyCode == 230))
  {
  CloseSocketConnect();//关闭连接
  throw new IOException(strReply.Substring(4));
  }
  if (iReplyCode != 230)
  {
  SendCommand("PASS " + strRemotePass);
  if (!(iReplyCode == 230 || iReplyCode == 202))
  {
  CloseSocketConnect();//关闭连接
  throw new IOException(strReply.Substring(4));
  }
  }
  bConnected = true; // 切换到目录
  ChDir(strRemotePath);
  }
  /// <summary>
  /// 关闭连接
  /// </summary>
  public void DisConnect()
  {
  if (socketControl != null)
  {
  SendCommand("QUIT");
  }
  CloseSocketConnect();
  }
  #endregion
  #region 传输模式 /// <summary>
  /// 传输模式:二进制类型、ASCII类型
  /// </summary>
  public enum TransferType { Binary, ASCII }; /// <summary>
  /// 设置传输模式
  /// </summary>
  /// <param name="ttType">传输模式</param>
  public void SetTransferType(TransferType ttType)
  {
  if (ttType == TransferType.Binary)
  {
  SendCommand("TYPE I");//binary类型传输
  }
  else
  {
  SendCommand("TYPE A");//ASCII类型传输
  }
  if (iReplyCode != 200)
  {
  throw new IOException(strReply.Substring(4));
  }
  else
  {
  trType = ttType;
  }
  }
  /// <summary>
  /// 获得传输模式
  /// </summary>
  /// <returns>传输模式</returns>


  public TransferType GetTransferType()
  {
  return trType;
  }

  #endregion
  #region 文件操作
  /// <summary>
  /// 获得文件列表
  /// </summary>
  /// <param name="strMask">文件名的匹配字符串</param>
  /// <returns></returns>
  public string[] Dir(string strMask)
  {
  // 建立链接
  if (!bConnected)
  {
  Connect();
  } //建立进行数据连接的socket
  Socket socketData = CreateDataSocket();

  //传送命令
  SendCommand("NLST " + strMask); //分析应答代码
  if (!(iReplyCode == 150 || iReplyCode == 125 || iReplyCode == 226))
  {
  throw new IOException(strReply.Substring(4));
  } //获得结果
  strMsg = "";
  while (true)
  {
  int iBytes = socketData.Receive(buffer, buffer.Length, 0);
  strMsg += ASCII.GetString(buffer, 0, iBytes);
  if (iBytes < buffer.Length)
  {
  break;
  }
  }
  char[] seperator = { '\n' };
  string[] strsFileList = strMsg.Split(seperator);
  socketData.Close();//数据socket关闭时也会有返回码
  if (iReplyCode != 226)
  {
  ReadReply();
  if (iReplyCode != 226)
  {
  throw new IOException(strReply.Substring(4));
  }
  }
  return strsFileList;
  }
  /// <summary>
  /// 获取文件大小
  /// </summary>
  /// <param name="strFileName">文件名</param>
  /// <returns>文件大小</returns>
   
  #endregion
  #region 目录操作
  /// <summary>
  /// 创建目录
  /// </summary>
  /// <param name="strDirName">目录名</param>
  public void MkDir(string strDirName)
  {
  if (!bConnected)
  {
  Connect();
  }
  SendCommand("MKD " + strDirName);
  if (iReplyCode != 257)
  {
  throw new IOException(strReply.Substring(4));
  }
  }


  /// <summary>
  /// 删除目录
  /// </summary>
  /// <param name="strDirName">目录名</param>
  public void RmDir(string strDirName)
  {
  if (!bConnected)
  {
  Connect();
  }
  SendCommand("RMD " + strDirName);
  if (iReplyCode != 250)
  {
  throw new IOException(strReply.Substring(4));
  }
  }

......................
  一次贴不下全部的代码

[解决办法]
有一个WebRequestMethods.Ftp.ListDirectory;
[解决办法]

探讨
有一个WebRequestMethods.Ftp.ListDirectory;

热点排行