当前位置:  编程技术>.net/c#/asp.net

C#版ftp方法实现类的代码

    来源: 互联网  发布时间:2014-10-13

    本文导语:  /*  FTPFactory.cs  Better view with tab space=4  Written by Jaimon Mathew (jaimonmathew@rediffmail.com)  Rolander,Dan (Dan.Rolander@marriott.com) has modified the  download  method to cope with file name with path information. He also  provided  the XML comments s...

/* 
FTPFactory.cs 
Better view with tab space=4 
Written by Jaimon Mathew (jaimonmathew@rediffmail.com) 
Rolander,Dan (Dan.Rolander@marriott.com) has modified the 
download 
method to cope with file name with path information. He also 
provided 
the XML comments so that the library provides Intellisense 
descriptions. 
use the following line to compile 
csc /target:library /out:FTPLib.dll /r:System.DLL FTPFactory.cs 
*/ 
using System; 
using System.Threading; 
using System.Net; 
using System.IO; 
using System.Text; 
using System.Net.Sockets; 
using System.Configuration; 
namespace AudioCollect 

///  
/// FTPFactory 的摘要说明。 
///  
public class FTPFactory 

static readonly log4net.ILog log = log4net.LogManager.GetLogger("log4net"); 
private string 
remoteHost,remotePath,remoteUser,remotePass,mes; 
private int remotePort,bytes; 
private Socket clientSocket; 
private int retValue; 
private Boolean debug; 
private Boolean logined; 
private string reply; 
private static int BLOCK_SIZE = 512; 
Byte[] buffer = new Byte[BLOCK_SIZE]; 
Encoding ASCII = Encoding.ASCII; 
public FTPFactory() 

string FTPRemoteIP = ConfigurationSettings.AppSettings["FTPRemoteIP"]; 
int FTPRemotePort = Convert.ToInt32( ConfigurationSettings.AppSettings["FTPRemotePort"] ); 
string FTPUser = ConfigurationSettings.AppSettings["FTPUser"]; 
string FTPPassword = ConfigurationSettings.AppSettings["FTPPassword"]; 
remoteHost = FTPRemoteIP; 
remotePath = "."; 
remoteUser = FTPUser; 
remotePass = FTPPassword; 
remotePort =FTPRemotePort; 
debug = false; 
logined = false; 

/// 
/// Set the name of the FTP server to connect to. 
/// 
/// Server name 
public void setRemoteHost(string remoteHost) 

this.remoteHost = remoteHost; 

/// 
/// Return the name of the current FTP server. 
/// 
/// Server name 
public string getRemoteHost() 

return remoteHost; 

/// 
/// Set the port number to use for FTP. 
/// 
/// Port number 
public void setRemotePort(int remotePort) 

this.remotePort = remotePort; 

/// 
/// Return the current port number. 
/// 
/// Current port number 
public int getRemotePort() 

return remotePort; 

/// 
/// Set the remote directory path. 
/// 
/// The remote directory path 
public void setRemotePath(string remotePath) 

this.remotePath = remotePath; 

/// 
/// Return the current remote directory path. 
/// 
/// The current remote directory path. 
public string getRemotePath() 

return remotePath; 

/// 
/// Set the user name to use for logging into the remote server. 
/// 
/// Username 
public void setRemoteUser(string remoteUser) 

this.remoteUser = remoteUser; 

/// 
/// Set the password to user for logging into the remote server. 
/// 
/// Password 
public void setRemotePass(string remotePass) 

this.remotePass = remotePass; 

/// 
/// Return a string array containing the remote directory's file list. 
/// 
/// 
/// 
public string[] getFileList(string mask) 

if(!logined) 

login(); 

Socket cSocket = createDataSocket(); 
sendCommand("NLST " + mask); 
if(!(retValue == 150 || retValue == 125)) 

throw new IOException(reply.Substring(4)); 

mes = ""; 
Thread.Sleep(700); 
while(true) 

if(cSocket.Connected) 

int bytes = cSocket.Receive(buffer, buffer.Length, 0); 
mes += ASCII.GetString(buffer, 0, bytes); 
if(bytes  0 ) 

setBinaryMode(false); 
sendCommand("REST "+offset); 
if(retValue != 350) 

//throw new IOException(reply.Substring(4)); 
//Some servers may not support resuming. 
offset = 0; 


if(offset > 0) 

if(debug) 

Console.WriteLine("seeking to " + offset); 

long npos = output.Seek(offset,SeekOrigin.Begin); 
Console.WriteLine("new pos="+npos); 


sendCommand("RETR " + remFileName); 
if(!(retValue == 150 || retValue == 125)) 

throw new IOException(reply.Substring(4)); 

while(true) 

bytes = cSocket.Receive(buffer, buffer.Length, 0); 
output.Write(buffer,0,bytes); 
if(bytes  0 ) 

sendCommand("REST " + offset); 
if(retValue != 350) 

//throw new IOException(reply.Substring(4)); 
//Remote server may not support resuming. 
offset = 0; 


/*==========================*/ 
sendCommand("STOR "+Path.GetFileName(fileName)); 
if( !(retValue == 125 || retValue == 150) ) 

throw new IOException(reply.Substring(4)); 

// open input stream to read source file 
FileStream input = new FileStream(fileName,FileMode.Open); 
if(offset != 0) 

if(debug) 

Console.WriteLine("seeking to " + offset); 

input.Seek(offset,SeekOrigin.Begin); 

Console.WriteLine("Uploading file "+fileName+" to "+remotePath); 
while ((bytes = input.Read(buffer,0,buffer.Length)) > 0) 

cSocket.Send(buffer, bytes, 0); 

input.Close(); 
Console.WriteLine(""); 
if (cSocket.Connected) 

cSocket.Close(); 

readReply(); 
if( !(retValue == 226 || retValue == 250) ) 

throw new IOException(reply.Substring(4)); 


/// 
/// Delete a file from the remote FTP server. 
/// 
/// 
public void deleteRemoteFile(string fileName) 

if(!logined) 

login(); 

sendCommand("DELE "+fileName); 
if(retValue != 250) 

throw new IOException(reply.Substring(4)); 


/// 
/// Rename a file on the remote FTP server. 
/// 
/// 
/// 
public void renameRemoteFile(string oldFileName,string 
newFileName) 

if(!logined) 

login(); 

sendCommand("RNFR "+oldFileName); 
if(retValue != 350) 

throw new IOException(reply.Substring(4)); 

// known problem 
// rnto will not take care of existing file. 
// i.e. It will overwrite if newFileName exist 
sendCommand("RNTO "+newFileName); 
if(retValue != 250) 

throw new IOException(reply.Substring(4)); 


/// 
/// Create a directory on the remote FTP server. 
/// 
/// 
public void mkdir(string dirName) 

if(!logined) 

login(); 

sendCommand("MKD "+dirName); 
if(retValue != 250) 

throw new IOException(reply.Substring(4)); 


/// 
/// Delete a directory on the remote FTP server. 
/// 
/// 
public void rmdir(string dirName) 

if(!logined) 

login(); 

sendCommand("RMD "+dirName); 
if(retValue != 250) 

throw new IOException(reply.Substring(4)); 


/// 
/// Change the current working directory on the remote FTP server. 
/// 
/// 
public void chdir(string dirName) 

if(dirName.Equals(".")) 

return; 

if(!logined) 

login(); 

sendCommand("CWD "+dirName); 
if(retValue != 250) 

throw new IOException(reply.Substring(4)); 

this.remotePath = dirName; 
Console.WriteLine("Current directory is "+remotePath); 

/// 
/// Close the FTP connection. 
/// 
public void close() 

if( clientSocket != null ) 

sendCommand("QUIT"); 

cleanup(); 
Console.WriteLine("Closing..."); 

/// 
/// Set debug mode. 
/// 
/// 
public void setDebug(Boolean debug) 

this.debug = debug; 

private void readReply() 

mes = ""; 
reply = readLine(); 
retValue = Int32.Parse(reply.Substring(0,3)); 

private void cleanup() 

if(clientSocket!=null) 

clientSocket.Close(); 
clientSocket = null; 

logined = false; 

private string readLine() 

while(true) 

bytes = clientSocket.Receive(buffer, buffer.Length, 0); 
mes += ASCII.GetString(buffer, 0, bytes); 
if(bytes  2) 

mes = mess[mess.Length-2]; 

else 

mes = mess[0]; 

if(!mes.Substring(3,1).Equals(" ")) 

return readLine(); 

if(debug) 

for(int k=0;k 

    
 
 

您可能感兴趣的文章:

  • C#操作FTP出现500错误解决办法
  • c# ftp上传下载的实现代码
  • c#连接ftp进行上传与下载的代码
  • c#语言 ftp上传到linux上去
  • C#实现的Ftp 文件上传与下载类
  • c#操作ftp类分享
  • C# winfrom 模拟ftp文件管理实现代码
  • C# FTP 操作类的实现代码
  • 请问谁知道怎么通过看LINIX原代码,来了解LINIX是如何实现FTP的,包括FTP的命令?谢谢
  • sh 里面ftp上传文件的代码。大侠帮忙看看下面的代码有什么问题
  • 求Linux下用C写的FTP服务端代码
  • 求助:Linux下ftp客户端代码编写
  • 关于ftp客户端的源代码?
  • 嵌入式Linux ftp源代码
  • 谁有linux下ftp客户端的源代码?
  • (****非作业帖),求ftp客户/服务器c语言源代码.
  • 哭求在linux下用c语言编写的ftp上传文件的源代码!
  • 谁给个C编写的完整的有注释的FTP源代码,我给300分
  • 在做FTP服务端,请问哪位有解析LIST命令的C语言代码?
  • 请问谁知道怎么通过看LINIX原代码,来了解LINIX是如何实现FTP的,包括FTP的命令?谢谢 iis7站长之家
  • 求 ftp客户端源代码
  • 求一份适合模仿学习的ftp客户端代码
  • ftp用代码创建文件夹出错
  • Linux下使用Shell脚本实现ftp的自动上传下载的代码小结
  • 哪里有VI和EMACS的源代码??我去GNU的FTP站点了,没找到,知道的朋友们,能不能告诉小弟一声,谢谢了!!!
  • VPS自动备份数据库到FTP的脚本代码
  • 散分了,ftp上传备份问题,tar打包加上日期,请帮我改一下脚本代码
  • 通过python下载FTP上的文件夹的实现代码
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 如何在linux下用c语言实现ftp编程
  • 可不可以在程序中直接使用ftp客户端的函数实现文件传输?
  • 用FTP命令实现文件拷贝并改名
  • C实现从远程主机FTP指定文件
  • 请教各位大虾:在linux下,怎样用程序实现基于ftp传输文件?
  • linux下FTP服务器与客户端的C语言实现
  • 请大侠们帮忙实现FTP客户端!!
  • 利用ftp,怎样在远程主机上实现类似cp的功能???
  • LINUX下FTP下载远程动态目录如何实现(十万火急啊)
  • 纯C实现完整FTP客户端
  • c编程实现ftp上传文件的问题
  • 在java中调用系统FTP命令,实现文件传输???
  • 如何实现在2G HD空间下装 linxu+ftp server+ssh
  • 老问题:如何用java实现ftp断点续传(要原码)急!!
  • to:那位大侠可以提供关于用JAVA实现FTP的客户端程序,
  • 在C语言中怎样实现自动FTP,谢谢
  • 脚本实现ftp上传文件的问题
  • 用Shell怎样实现两台主机通过ftp文件传输
  • 请问在unix下如何用c实现ftp的自动上下传文件,急!!!
  • unix 下 C++实现 ftp 到另一台主机上 修改文件内容 !能不能直接在主机上修改 还是只能get下来本地修改完后 在put上去
  • java命名空间javax.print.attribute.standard类referenceurischemessupported的类成员方法: ftp定义及介绍
  • 用ftp命令连到ftp服务器后,在ftp提示符下用什么命令可以查看本地机器当前目录有哪些文件?
  • ftp协议介绍及ftp常用的上传下载等操作命令使用方法
  • 为什么会出现ftp: ftp/tcp: unknown service
  • FTP客户端Java类库 ftp4j
  • 请问如何在Redhat7.1下安装Ftp服务,如何开启Ftp帐号????请教!!!急急急急急急
  • FTP匿名登陆 LINUX 出现错误 linux FTP 550 permission
  • ubuntu装好BUM后,看不到FTP服务,如何开启FTP服务?
  • 基于Web的FTP客户端 net2ftp
  • 跨平台FTP服务器 Wing FTP Server
  • Node.js 的 FTP 客户端 node-ftp


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3