FtpWebRequest::ContentOffset Property


Gets or sets a byte offset into the file being downloaded by this request.

Namespace:   System.Net
Assembly:  System (in System.dll)

property long long ContentOffset {
	long long get();
	void set(long long value);

Property Value

Type: System::Int64

An Int64 instance that specifies the file offset, in bytes. The default value is zero.

Exception Condition

A new value was specified for this property for a request that is already in progress.


The value specified for this property is less than zero.

Set the ContentOffset property when downloading a file from an FTP server. This offset indicates the position in the server's file that marks the start of the data to be downloaded. The offset is specified as the number of bytes from the start of the file; the offset of the first byte is zero.

Setting ContentOffset causes the FtpWebRequest to send a restart (REST) command to the server. This command is ignored by most FTP server implementations if you are uploading data to the server.

Changing ContentOffset after calling the GetRequestStream, BeginGetRequestStream, GetResponse, or BeginGetResponse method causes an InvalidOperationException exception.

The following code example demonstrates downloading part of a file from a server and appending the downloaded data to a local file.

   // NOT Working - throws a protocolError - 350 Restarting at 8. for args shown in Main.
   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 appended.
      // Example: ftp://contoso.com/someFile.txt.
      // The fileName parameter identifies the local 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 = dynamic_cast<FtpWebRequest^>(WebRequest::Create( serverUri ));
      request->Method = WebRequestMethods::Ftp::DownloadFile;
      request->ContentOffset = offset;
      FtpWebResponse^ response = nullptr;
         response = dynamic_cast<FtpWebResponse^>(request->GetResponse());
      catch ( WebException^ e ) 
         Console::WriteLine( e->Status );
         Console::WriteLine( e->Message );
         return false;

      Stream^ newFile = response->GetResponseStream();
      StreamReader^ reader = gcnew StreamReader( newFile );

      // Display downloaded data.
      String^ newFileData = reader->ReadToEnd();

      // Append the response data to the local file
      // using a StreamWriter.
      StreamWriter^ writer = File::AppendText(fileName);

     // Display the status description.

     // Cleanup.
     // string fileString = System.Text.Encoding.UTF8.GetString(newFileData);
     // Console::WriteLine( sr );
     Console::WriteLine("Download restart - status: {0}",response->StatusDescription);
     return true;

.NET Framework
Available since 2.0
Return to top