【转载】.NET 2.0下简单的FTP访问程序

简介: .NET 2.0下简单的FTP访问程序[简介] 也许大家也不想总依赖着第三方FTP软件,值得高兴的是,本文将给你开发出一套免费的来。尽管,本文中的代码没有设计成可重用性很高的库,不过确实是一个简单的可以重复使用部分代码的程序。

.NET 2.0下简单的FTP访问程序

FTP源代码


[简介]

也许大家也不想总依赖着第三方FTP软件,值得高兴的是,本文将给你开发出一套免费的来。尽管,本文中的代码没有设计成可重用性很高的库,不过确实是一个简单的可以重复使用部分代码的程序。本文最大的目的是演示如何在.NET 2.0中使用C#设计FTP访问程序。

[代码使用]

添加以下命名空间:

Code:
using System.Net;
using System.IO;


下面的步骤可以看成,使用 FtpWebRequest对象发送FTP请求的一般步骤:

1. 创建一个带有ftp服务器Uri的FtpWebRequest对象
2. 设置FTP的执行模式(上传、下载等)
3. 设置ftp webrequest选项(支持ssl,作为binary传输等)
4. 设置登陆帐号
5. 执行请求
6. 接收响应流(如果需要的话)
7. 关闭FTP请求,并关闭任何已经打开的数据流


首先,创建一个uri,它包括ftp地址、文件名(目录结构),这个uri将被用于创建 FtpWebRequest 实例。

设置 FtpWebRequest 对象的属性,这些属性决定ftp请求的设置。一些重用的属性如下:

Credentials :用户名、密码
KeepAlive :是否在执行完请求之后,就关闭。默认,设置为true
UseBinary :传输文件的数据格式Binary 还是ASCII。
UsePassive :主动还是被动模式,早期的ftp,主动模式下,客户端会正常工作;不过,如今,大部分端口都已经被封掉了,导致主动模式会失败。
Contentlength :这个值经常被忽略,不过如果你设置的话,还是对服务器有帮助的,至少让它事先知道用户期望的文件是多大。
Method :决定本次请求的动作(upload, download, filelist 等等)

上传文件

private   void  Upload( string  filename)
{
  FileInfo fileInf 
=   new  FileInfo(filename);
  
string  uri  =   " ftp:// "   +  ftpServerIP  +   " / "   +  fileInf.Name;
  FtpWebRequest reqFTP;
   
  
//  Create FtpWebRequest object from the Uri provided
  reqFTP  =  (FtpWebRequest)FtpWebRequest.Create( new  Uri(
            
" ftp:// "   +  ftpServerIP  +   " / "   +  fileInf.Name));

  
//  Provide the WebPermission Credintials
  reqFTP.Credentials  =   new  NetworkCredential(ftpUserID,
                                             ftpPassword);
   
  
//  By default KeepAlive is true, where the control connection is
  
//  not closed after a command is executed.
  reqFTP.KeepAlive  =   false ;

  
//  Specify the command to be executed.
  reqFTP.Method  =  WebRequestMethods.Ftp.UploadFile;
   
  
//  Specify the data transfer type.
  reqFTP.UseBinary  =   true ;

  
//  Notify the server about the size of the uploaded file
  reqFTP.ContentLength  =  fileInf.Length;

  
//  The buffer size is set to 2kb
   int  buffLength  =   2048 ;
  
byte [] buff  =   new   byte [buffLength];
  
int  contentLen;
   
  
//  Opens a file stream (System.IO.FileStream) to read
  the file to be uploaded
  FileStream fs 
=  fileInf.OpenRead();
   
  
try
  {
        
//  Stream to which the file to be upload is written
        Stream strm  =  reqFTP.GetRequestStream();
       
        
//  Read from the file stream 2kb at a time
        contentLen  =  fs.Read(buff,  0 , buffLength);
       
        
//  Till Stream content ends
         while  (contentLen  !=   0 )
        {
            
//  Write Content from the file stream to the
            
//  FTP Upload Stream
            strm.Write(buff,  0 , contentLen);
            contentLen 
=  fs.Read(buff,  0 , buffLength);
        }
       
        
//  Close the file stream and the Request Stream
        strm.Close();
        fs.Close();
  }
  
catch (Exception ex)
    {
        MessageBox.Show(ex.Message, 
" Upload Error " );
    }
}


上面的代码用于 上传文件,设置FtpWebRequest 到ftp服务器上指定的文件,并设置其它属性。打开本地文件,把其内容写入FTP请求数据流。

下载文件

private   void  Download( string  filePath,  string  fileName)
{
    FtpWebRequest reqFTP;
    
try
    {
        
// filePath = <<The full path where the
        
// file is to be created. the>>,
        
// fileName = <<Name of the file to be createdNeed not
        
// name on FTP server. name name()>>
        FileStream outputStream  =   new  FileStream(filePath  +
                                
" \\ "   +  fileName, FileMode.Create);

        reqFTP 
=  (FtpWebRequest)FtpWebRequest.Create( new  Uri( " ftp:// "   +
                                ftpServerIP 
+   " / "   +  fileName));
        reqFTP.Method 
=  WebRequestMethods.Ftp.DownloadFile;
        reqFTP.UseBinary 
=   true ;
        reqFTP.Credentials 
=   new  NetworkCredential(ftpUserID,
                                                    ftpPassword);
        FtpWebResponse response 
=  (FtpWebResponse)reqFTP.GetResponse();
        Stream ftpStream 
=  response.GetResponseStream();
        
long  cl  =  response.ContentLength;
        
int  bufferSize  =   2048 ;
        
int  readCount;
        
byte [] buffer  =   new   byte [bufferSize];

        readCount 
=  ftpStream.Read(buffer,  0 , bufferSize);
        
while  (readCount  >   0 )
        {
            outputStream.Write(buffer, 
0 , readCount);
            readCount 
=  ftpStream.Read(buffer,  0 , bufferSize);
        }

        ftpStream.Close();
        outputStream.Close();
        response.Close();
    }
    
catch  (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}


上面是从FTP 下载文件的示例代码,与上传不一样,这里需要一个响应数据流(response stream),它包括文件请求的内容。使用FtpWebRequest 类中的 GetResponse() 函数得到数据。

获取文件列表

public   string [] GetFileList()
{
    
string [] downloadFiles;
    StringBuilder result 
=   new  StringBuilder();
    FtpWebRequest reqFTP;
    
try
    {
        reqFTP 
=  (FtpWebRequest)FtpWebRequest.Create( new  Uri(
                  
" ftp:// "   +  ftpServerIP  +   " / " ));
        reqFTP.UseBinary 
=   true ;
        reqFTP.Credentials 
=   new  NetworkCredential(ftpUserID,
                                                   ftpPassword);
        reqFTP.Method 
=  WebRequestMethods.Ftp.ListDirectory;
        WebResponse response 
=  reqFTP.GetResponse();
        StreamReader reader 
=   new  StreamReader(response
                                        .GetResponseStream());
       
        
string  line  =  reader.ReadLine();
        
while  (line  !=   null )
        {
            result.Append(line);
            result.Append(
" \n " );
            line 
=  reader.ReadLine();
        }
        
//  to remove the trailing '\n'
        result.Remove(result.ToString().LastIndexOf( ' \n ' ),  1 );
        reader.Close();
        response.Close();
        
return  result.ToString().Split( ' \n ' );
    }
    
catch  (Exception ex)
    {
        System.Windows.Forms.MessageBox.Show(ex.Message);
        downloadFiles 
=   null ;
        
return  downloadFiles;
    }
}


上面是得到ftp服务器上的指定路径下的文件列表,Uri被指定为Ftp服务器名称、端口以及目录结构。

对于FTP服务器上文件的 重命名删除获取文件大小文件详细信息创建目录等等操作于上面类似,你很容易地理解本文中的代码。
目录
相关文章
|
3月前
|
域名解析 缓存 Linux
如何让你的.NET WebAPI程序支持HTTP3?
如何让你的.NET WebAPI程序支持HTTP3?
47 2
如何让你的.NET WebAPI程序支持HTTP3?
|
6月前
|
安全 Shell 数据库
「学习记录」.NET程序的数据库密码解密
「学习记录」.NET程序的数据库密码解密
|
7月前
|
XML 存储 JSON
使用自定义XML配置文件在.NET桌面程序中保存设置
本文将详细介绍如何在.NET桌面程序中使用自定义的XML配置文件来保存和读取设置。除了XML之外,我们还将探讨其他常见的配置文件格式,如JSON、INI和YAML,以及它们的优缺点和相关的NuGet类库。最后,我们将重点介绍我们为何选择XML作为配置文件格式,并展示一个实用的示例。
96 0
|
前端开发 Ubuntu Linux
【.NET6+Avalonia】开发支持跨平台的仿WPF应用程序以及基于ubuntu系统的演示
随着跨平台越来越流行,.net core支持跨平台至今也有好几年的光景了。但是目前基于.net的跨平台,大多数还是在使用B/S架构的跨平台上;至于C/S架构,大部分人可能会选择QT进行开发,或者很早之前还有一款Mono可以支持.NET开发者进行开发跨平台应用。
835 0
【.NET6+Avalonia】开发支持跨平台的仿WPF应用程序以及基于ubuntu系统的演示
|
5月前
|
开发框架 .NET 测试技术
.NET Core 日志记录程序和常用日志记录框架
本文主要内容为.NET Core的日志记录程序和常使用的日志记录框架的简单使用 首先,打开VS2019新建一个ASP.NET Core Web Api项目,项目创建好后会有一个集成好的天气预报的类和控制器,接下来,我们的方法就在天气控制器里完成。
49 0
|
7月前
|
开发框架 .NET C#
如何判断一个 Dot Net 程序是 32 位还是 64 位?
如何判断一个 Dot Net 程序是 32 位还是 64 位?
|
9月前
|
C++
VS-2019-.NET-C#使用log4net打日志,程序日志记录
VS-2019-.NET-C#使用log4net打日志,程序日志记录
106 0
|
9月前
|
开发框架 .NET
解决NET Core发布iis项目覆盖原有的项目时"另一个程序正在使用此文件,进程无法访问"
解决NET Core发布iis项目覆盖原有的项目时"另一个程序正在使用此文件,进程无法访问"
|
10月前
【vb.net机房收费系统】之没有包含要从继承的组件的已生成程序集
【vb.net机房收费系统】之没有包含要从继承的组件的已生成程序集
25 0
|
监控 安全 BI
手麻系统源码,手术麻醉信息系统源码 C#.net程序源码
手术麻醉管理系统针对麻醉科、手术室和外科病房开发,用于管理与手术麻醉相关的信息,实现有关数据的自动采集、报告的自动生成以及病历的电子化,是医院信息系统的一个重要组成部分。采集和管理的数据包含患者的手术信息、麻醉信息,患者手术过程中从麻醉机、监护仪上采集到的数据和患者情况等。 功能包括:手术申请、手术排班、术前访视、麻醉计划、安全核查、病历浏览、体征监测、麻醉记录、物资管理、复苏监测、复苏记录、麻醉总结、手术计费、术后镇痛、术后随访等。
手麻系统源码,手术麻醉信息系统源码 C#.net程序源码