1.//用FileInfo能获得此文件的相关信息,如name,length,createtime…等
FileInfo file = new FileInfo(filepath);
2.NET Framework 通过 FtpWebRequest(实现文件传输协议 (FTP) 客户端) 和 FtpWebResponse(封装文件传输协议 (FTP) 服务器对请求的响应) 类提供对 FTP 协议的全面支持。这些类是从 WebRequest 和 WebResponse 派生的。
3. 此示例显示如何将文件上载到 FTP 服务器
using System;
using System.IO;
using System.Net;
using System.Text;
namespace Examples.System.Net
{
public class WebRequestGetExample
{
public static void Main ()
{
//使用此对象与服务器建立连接,提供FTP的地址,以及要执行的方法
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.contoso.com/test.htm");
request.Method = WebRequestMethods.Ftp.UploadFile;
//提供请求的凭证,即用户名和密码,此事例假设使用的是匿名用户
request.Credentials = new NetworkCredential ("anonymous","janeDoe@contoso.com");
//将文件内容装载入请求的流中
StreamReader sourceStream = new StreamReader("testfile.txt");
byte [] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
sourceStream.Close();
request.ContentLength = fileContents.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Console.WriteLine("Upload File Complete, status {0}", response.StatusDescription);
response.Close();
}
}
}
4.此示例显示如何从 FTP 服务器下载文件
using System;
using System.IO;
using System.Net;
using System.Text;
namespace Examples.System.Net
{
public class WebRequestGetExample
{
public static void Main ()
{
//使用此对象与服务器建立连接。
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.contoso.com/test.htm");
request.Method = WebRequestMethods.Ftp.DownloadFile;
//提供请求的凭证,即用户名和密码,此事例假设使用的是匿名用户
request.Credentials = new NetworkCredential ("anonymous","janeDoe@contoso.com");
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
Console.WriteLine(reader.ReadToEnd());
Console.WriteLine("Download Complete, status {0}", response.StatusDescription);
reader.Close();
response.Close();
}
}
}
5.c#快截键
ctrl + J 列出成员列表
ctrl + shift + space 参数信息
Alt + 右方向键 完成单词
6. FTP断点续传的原理
客户端的实现步骤如下:
一、下载:
1、向服务器发送“REST + 本地文件长度”命令,告诉服务器,客户端要断点下载了。这时服务器还不知道客户端要下载哪个文件;
2、向服务器发送“RETR + 文件名”命令,通知服务器要下载的文件名,这时服务器开始定位文件指针读文件并发送数据。
3、客户端定位本地文件指针(文件末尾);
4、两端的准备工作都做完了以后,客户端创建socket,以被动或非被动方式建立数据通道,循环调用recv接收数据并追加入本地文件;
二、上传:
1、获取服务器上和本地要上传文件的同名文件大小;
2、向服务器发送“APPE + 文件名”,通知服务器,接下来从数据通道发送给你的数据要附加到这个文件末尾。
3、定位本地文件指针(和FTP上文件大小相同的位置)
4、从文件指针处读数据并发送。
7. 下面的代码示例演示如何将文件复制到请求的数据流,以及如何将请求发送到服务器以便上载数据并将数据追加到文件。
public static bool AppendFileOnServer(string fileName, Uri serverUri)
{
//Uri的格式必须如下所示
// 例如: ftp://contoso.com/someFile.txt.
// 在服务器端这数据将被追加到文件
if (serverUri.Scheme != Uri.UriSchemeFtp)
{
return false;
}
// 与服务器建立连接
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri);
//FTP命令
request.Method = WebRequestMethods.Ftp.AppendFile;
StreamReader sourceStream = new StreamReader(fileName);
byte [] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
sourceStream.Close();
request.ContentLength = fileContents.Length;
// 此例子假设是用匿名用户登陆
request.Credentials = new NetworkCredential ("anonymous","janeDoe@contoso.com");
Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();
FtpWebResponse response = (FtpWebResponse) request.GetResponse();
Console.WriteLine("Append status: {0}",response.StatusDescription);
response.Close();
return true;
}