HI END


一种永不妥协,追求极致与完美的精神与态度。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2008年11月26日工作日记

Posted on 2008-11-27 08:14  HI END  阅读(179)  评论(0编辑  收藏  举报

1.  ContentOffset 属性

属性值

指定文件偏移量(以字节为单位)的 Int64 实例。默认值为零。

FTP 服务器下载文件时设置 ContentOffset 属性。此偏移量指示服务器的文件中的位置,标记要下载的数据的起始位置。此偏移量指定为距离文件开头的字节数;第一个字节的偏移量为零。

设置 ContentOffset 将导致 FtpWebRequest 向服务器发送重新启动 (REST) 命令。如果向服务器上载数据,则大多数 FTP 服务器实现都将忽略此命令。

在调用 GetRequestStreamBeginGetRequestStreamGetResponse 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

假设文件A1000个字节,现在建立一个FileStream,并将A读入FileStream

此时FileStream的长度为1000,初始的Position0

当从FileStream中读取数据并装载入byte的数组中,此数组的长度则为1000(有效的数据是在0~999上,因为长度为1000字节,起始是0而不是1),此时FileStreamposition1000却不是999

以上表明Position在某个位置上,此位置的数据并没有被读取。只有当指针移动到下个位置时,此位置的数据才被读取。

OffSet是指数据的偏移量,例如,一个数据有1000个字节。用FTP上传了500字节,那么这Ftp上此文件的OffSet==499,当续传的时候,就是从500这个位置开始写数据。所以,OffSet是指有效数据的最后位置。