本人现在在做开发,要用到FTP传送文件,因为是第一次使用FTP不是很清楚,所以请高手大侠来相助一下~
问题:在文件传送之前先获得文件的大小,文件传送后再获得传送后服务器上的文件大小,然后比较传送前后文件是否完整,
若传送后的文件大小与传送前部一样,就删除掉已经传送到服务器上的文件 。
我的问题就 2 个:
1 ,如何获得传送后服务器上的文件大小
2 ,如何删除掉已经传送到服务器上的文件
本人使用的开发环境为 C# 2003 版 ~ 感激不尽 !

解决方案 »

  1.   

    一些io操作应该可以吧,file,等一些列封装好的类,拿来用就是了
      

  2.   

    1 ,如何获得传送后服务器上的文件大小 
    ftp命令
      size filename2 ,如何删除掉已经传送到服务器上的文件 
    ftp命令
      dele filename
      

  3.   


    这些命令我是知道的,就是不太明白那个 filename 具体该如何赋值
    我的 远程FTP服务器是 :192.168.1.14 ,上传文件夹是:E:\UpLoad\ 
    用户名:sa 密码:sa ,文件上传是可以的
    贴一段我的那个代码吧:
    public void Delete(string strFileName)
    {
    if(!bConnected)
    {
    Connect();
    }
    SendCommand("DELE "+strFileName);
    if(iReplyCode != 250)
    {
    throw new IOException(strReply.Substring(4));
    }
    }
    就请你直接告诉我 strFileName 该给个什么值吧,呵呵 ~ 
      

  4.   


    你的这个建议给我提了一个醒 
    IO类的File 用是用过,不过都是针对本地的文件进行的操作,对远程机器上的文件做删除操作没试过,不知道行不行,今天下班了,明天试过之后再回复你~ 谢谢你的建议 
      

  5.   

     string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name
    参考http://blog.chinaunix.net/u/17663/showart_1901733.html
      

  6.   

    这些天忙别的差点忘了这个,这个我也试过了不行,不知道是不是我试的不对
    按照这句话,我给我那个方法的 : 
    // Delete(string strFileName) 
    string uri = "ftp://192.168.1.14/UpLoad/abc.txt";
    Delete(uri);
    这样试过了之后不行,又试着把 /UpLoad  换成 E$/UpLoad 也不行,我无语了你介绍的那个参考,应该是 VS2005及以上版本的,可惜我们公司现在用的是 2003 ,无奈
    还请继续指教 ~ 等回复 ~
      

  7.   

    /// <summary>
    /// FTPでファイル転送
    /// </summary>
    public class FTP
    {
    public FTP()
    {
    strRemoteHost  = "";
    strRemotePath  = "";
    strRemoteUser  = "";
    strRemotePass  = "";
    strRemotePort  = 21;
    bConnected     = false;
    }
    public FTP(string remoteHost, string remotePath, string remoteUser, string remotePass, int remotePort)
    {
    strRemoteHost  = remoteHost; // 遠程主機/IP
    strRemotePath  = remotePath; // 遠程ファイルパス
    strRemoteUser  = remoteUser; // 遠程登録ユーザー
    strRemotePass  = remotePass; // 遠程登録パスワード
    strRemotePort  = remotePort; // 遠程登録端口
    Connect(); 
    }
    /// <summary>
    /// FTPSVのIP_Address
    /// </summary>
    private string strRemoteHost;
    public string RemoteHost
    {
    get
    {
    return strRemoteHost;
    }
    set
    {
    strRemoteHost = value;
    }
    }
    /// <summary>
    /// FTPSVの端口
    /// </summary>
    private int strRemotePort;
    public int RemotePort
    {
    get
    {
    return strRemotePort;
    }
    set
    {
    strRemotePort = value;
    }
    }
    /// <summary>
    /// 当前SVのディレクトリ
    /// </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;
    }
    }
      

  8.   

    /// <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();
    }  
    /// <summary>
    /// 転送模式:Binary,ASCII
    /// </summary>
    public enum TransferType {Binary,ASCII};  

    /// <summary>
    /// 転送模式設定
    /// </summary>
    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>
    public TransferType GetTransferType()
    {
    return trType;
    }
    /// <summary>
    /// ファイルリスト取る
    /// </summary>
    public string[] Dir(string strMask)
    {
    if(!bConnected)
    {
    Connect();
    }
    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();
    if(iReplyCode != 226)
    {
    ReadReply();
    if(iReplyCode != 226)
    {
    throw new IOException(strReply.Substring(4));
    }
    }
    return strsFileList;
    }
    /// <summary>
    /// ファイルサイズ取る
    /// </summary>
    public long GetFileSize(string strFileName)
    {
    if(!bConnected)
    {
    Connect();
    }
    SendCommand("SIZE " + Path.GetFileName(strFileName));
    long lSize=0;
    if(iReplyCode == 213)
    {
    lSize = Int64.Parse(strReply.Substring(4));
    }
    else
    {
    throw new IOException(strReply.Substring(4));
    }
    return lSize;
    }
    /// <summary>
    /// ファイル削除
    /// </summary>
    public void Delete(string strFileName)
    {
    if(!bConnected)
    {
    Connect();
    }
    SendCommand("DELE "+strFileName);
    if(iReplyCode != 250)
    {
    throw new IOException(strReply.Substring(4));
    }
    }
    /// <summary>
    /// 再命名
    /// </summary>
    public void Rename(string strOldFileName,string strNewFileName)
    {
    if(!bConnected)
    {
    Connect();
    }
    SendCommand("RNFR "+strOldFileName);
    if(iReplyCode != 350)
    {
    throw new IOException(strReply.Substring(4));
    }
    SendCommand("RNTO "+strNewFileName);
    if(iReplyCode != 250)
    {
    throw new IOException(strReply.Substring(4));
    }
    }
      

  9.   

    C# 中有现成的 FTP的类吧