1. ContentOffset 属性
属性值
指定文件偏移量(以字节为单位)的 Int64 实例。默认值为零。
从 FTP 服务器下载文件时设置 ContentOffset 属性。此偏移量指示服务器的文件中的位置,标记要下载的数据的起始位置。此偏移量指定为距离文件开头的字节数;第一个字节的偏移量为零。
设置 ContentOffset 将导致 FtpWebRequest 向服务器发送重新启动 (REST) 命令。如果向服务器上载数据,则大多数 FTP 服务器实现都将忽略此命令。
在调用 GetRequestStream、BeginGetRequestStream、GetResponse 或 BeginGetResponse 方法之后更改 ContentOffset 会引发 InvalidOperationException 异常。
*下面的代码示例演示如何从服务器下载文件的一部分,并将下载的数据追加到本地文件。
public static bool RestartDownloadFromServer(string fileName, Uri serverUri, long offset)
{
// The serverUri parameter should use the ftp:// scheme.
// It identifies the server file that is to be downloaded
// Example: ftp://contoso.com/someFile.txt.
// The fileName parameter identifies the local file.
//The serverUri parameter identifies the remote file.
// The offset parameter specifies where in the server file to start reading data.
if (serverUri.Scheme != Uri.UriSchemeFtp)
{
return false;
}
// Get the object used to communicate with the server.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.ContentOffset = offset;
FtpWebResponse response = null;
try
{
response = (FtpWebResponse) request.GetResponse();
}
catch (WebException e)
{
Console.WriteLine (e.Status);
Console.WriteLine (e.Message);
return false;
}
// Get the data stream from the response.
Stream newFile = response.GetResponseStream();
// Use a StreamReader to simplify reading the response data.
StreamReader reader = new StreamReader(newFile);
string newFileData = reader.ReadToEnd();
// Append the response data to the local file
// using a StreamWriter.
StreamWriter writer = File.AppendText(fileName);
writer.Write(newFileData);
// Display the status description.
// Cleanup.
writer.Close();
reader.Close();
response.Close();
Console.WriteLine("Download restart - status: {0}",response.StatusDescription);
return true;
}
2.position,offset
假设文件A有1000个字节,现在建立一个FileStream,并将A读入FileStream。
此时FileStream的长度为1000,初始的Position为0。
当从FileStream中读取数据并装载入byte的数组中,此数组的长度则为1000(有效的数据是在0~999上,因为长度为1000字节,起始是0而不是1),此时FileStream的position为1000却不是999。
以上表明Position在某个位置上,此位置的数据并没有被读取。只有当指针移动到下个位置时,此位置的数据才被读取。
OffSet是指数据的偏移量,例如,一个数据有1000个字节。用FTP上传了500字节,那么这Ftp上此文件的OffSet==499,当续传的时候,就是从500这个位置开始写数据。所以,OffSet是指有效数据的最后位置。