[转]利用FtpClient类实现文件的上传下载功能

该代码源自互联网,并经过修改:

解决了中文文件名会出现乱码的情况;

改善了上传不稳定的问题(但没有从根本上解决,目前只知道在接收Socket时有时会收到一半就退出,结果造成接收数据不完整,经常出现在Dir时。尚未仔细研究。)

FtpClient.cs

    /// <summary>
    
/// FtpClient 的摘要说明。
    
/// </summary>

    public class FtpClient : IDisposable
    
{
        
私有变量

        
// 构造方法
        构造方法

        
// 属性
        BlockSize 接收和发送数据的缓冲区大小

        
ServerAddress Ftp 服务器地址

        
ServerPort Ftp 服务器端口

        
RemotePath 当前服务器目录

        
LoginUser 登录用户账号

        
LoginPassword 用户登录密码

        
Connected 是否登录

        
// 接口
        IDisposable 成员

        
// 私有方法
        ReadReply

        
CreateDataSocket 建立进行数据连接的socket

        
CloseSocketConnect 关闭socket连接(用于登录以前)

        
ReadLine 读取Socket返回的所有字符串

        
SendCommand 发送命令并获取应答码和最后一行应答字符串

        
// 公共方法
        Connect 建立连接

        
EnsureConnected 确保已经连接到服务器

        
Close 关闭连接

        
TransferType 获取或设置传输模式

        
Dir 获得文件列表

        
GetFileSize 获取文件大小

        
Delete 删除

        
Rename 重命名文件(如果新文件名与已有文件重名,将覆盖已有文件)

        
Download 下载文件

        
Upload 上传文件

        
MakeDirectory 创建目录

        
RenameDirectory 删除目录

        
ChangeDirectory 改变当前目录
    }

FtpClientException.cs

    /// <summary>
    
/// FtpClientException 的摘要说明。
    
/// </summary>

    [Serializable]
    
public class FtpClientException : Exception
    
{
        
构造方法
    }

}
FtpReply.cs
    /// <summary>
    
/// FtpReply 的摘要说明。
    
/// </summary>

    [Serializable]
    
public class FtpReply
    
{
        
private int _code;
        
private string _message;

        
public FtpReply() : this(0string.Empty)
        
{
        }


        
public FtpReply(int code, string message)
        
{
            
this._code = code;
            
this._message = message;
        }


        
public int Code
        
{
            
get
            
{
                
return this._code;
            }

            
set
            
{
                
this._code = value;
            }

        }


        
public string Message
        
{
            
get
            
{
                
return this._message;
            }

            
set
            
{
                
this._message = value;
            }

        }

    }

FtpTransferType.cs
    /// <summary>
    
/// 传输模式。
    
/// </summary>

    public enum FtpTransferType
    
{
        
/// <summary>
        
/// 二进制模式。
        
/// </summary>

        Binary,
        
/// <summary>
        
/// ASCII 模式。
        
/// </summary>

        ASCII
    }
;
posted @ 2009-07-19 11:42  浪剑  阅读(1082)  评论(1编辑  收藏  举报