.NET Framework Class Library
FtpWebResponse..::.ContentLength Property

Gets the length of the data received from the FTP server.

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

Visual Basic (Declaration)
Public Overrides ReadOnly Property ContentLength As Long
Visual Basic (Usage)
Dim instance As FtpWebResponse
Dim value As Long

value = instance.ContentLength
C#
public override long ContentLength { get; }
Visual C++
public:
virtual property long long ContentLength {
    long long get () override;
}
JScript
public override function get ContentLength () : long

Property Value

Type: System..::.Int64
An Int64 value that contains the number of bytes of data received from the FTP server.
Remarks

When a response stream is returned by the FTP server, the ContentLength property contains the number of bytes in the stream. ContentLength returns −1 if no data was returned in the response or if the server did not send content length information. The return value is greater than or equal to zero if data was or should have been returned. For example, for requests that use the ListDirectory field, the ContentLength property always returns −1. For requests that use the UploadFile method, the ContentLength property is always zero. For requests that use the DownloadFile method, the property is greater than zero if the downloaded file contained data and is zero if it was empty.

For requests that use the GetFileSize method, ContentLength returns the size of the specified file on the server.

Examples

The following code example downloads a file from on the specified FTP server. This property contains the number of bytes in the downloaded file.

C#
public static bool DownloadFileFromServer(Uri serverUri, string localFileName)
{
    // The serverUri parameter should start with the ftp:// scheme.
    if (serverUri.Scheme != Uri.UriSchemeFtp)
    {
        return false;
    }
    // Get the object used to communicate with the server.
    // Note that the cast to FtpWebRequest is done only
    // for the purposes of illustration. If your application
    // does not set any properties other than those defined in the
    // System.Net.WebRequest class, you can use the following line instead:
    // WebRequest request = WebRequest.Create(serverUri);
    //
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri);
    request.Method = WebRequestMethods.Ftp.DownloadFile;

    FtpWebResponse response = (FtpWebResponse) request.GetResponse();

    Stream responseStream = null;
    StreamReader readStream = null;
    StreamWriter writeStream = null;
    try
    {
        responseStream = response.GetResponseStream(); 
        readStream = new StreamReader(responseStream, System.Text.Encoding.UTF8);
        // Display information about the data received from the server.
        Console.WriteLine("Bytes received: {0}",response.ContentLength);   

        Console.WriteLine("Message from server: {0}", response.StatusDescription);
        Console.WriteLine("Resource: {0}", response.ResponseUri);

        // Write the bytes received from the server to the local file.
        if (readStream != null)
        {
            writeStream = new StreamWriter(localFileName, false);
            writeStream.Write(readStream.ReadToEnd());
        }
    }
    finally
    {
        if (readStream != null)
        {
            readStream.Close();
        }
        if (response != null)
        {
            response.Close();
        }
        if (writeStream != null)
        {
            writeStream.Close();
        }
    }
    return true;
}
Visual C++
static bool DownloadFileFromServer( Uri^ serverUri, String^ localFileName )
{
   // The serverUri parameter should start with the ftp:// scheme.
   if ( serverUri->Scheme != Uri::UriSchemeFtp )
   {
      return false;
   }

   // Get the object used to communicate with the server.
   // Note that the cast to FtpWebRequest is done only
   // for the purposes of illustration. If your application
   // does not set any properties other than those defined in the
   // System.Net.WebRequest class, you can use the following line instead:
   // WebRequest request = WebRequest.Create(serverUri);
   //
   FtpWebRequest^ request = dynamic_cast<FtpWebRequest^>(WebRequest::Create( serverUri ));
   request->Method = WebRequestMethods::Ftp::DownloadFile;
   FtpWebResponse^ response = dynamic_cast<FtpWebResponse^>(request->GetResponse());
   Stream^ responseStream = nullptr;
   StreamReader^ readStream = nullptr;
   StreamWriter^ writeStream = nullptr;
   try
   {
      responseStream = response->GetResponseStream();
      readStream = gcnew StreamReader( responseStream,System::Text::Encoding::UTF8 );

      // Display information about the data received from the server.
      Console::WriteLine( "Bytes received: {0}", response->ContentLength );
      Console::WriteLine( "Message from server: {0}", response->StatusDescription );
      Console::WriteLine( "Resource: {0}", response->ResponseUri );

      // Write the bytes received from the server to the local file.
      if ( readStream != nullptr )
      {
         writeStream = gcnew StreamWriter( localFileName,false );
         writeStream->Write( readStream->ReadToEnd() );
      }
   }
   finally
   {
      if ( readStream != nullptr )
      {
         readStream->Close();
      }

      if ( response != nullptr )
      {
         response->Close();
      }

      if ( writeStream != nullptr )
      {
         writeStream->Close();
      }
   }

   return true;
}
CPP_OLD
public:
    static bool DownloadFileFromServer(Uri* serverUri, String* localFileName)
    {
        // The serverUri parameter should start with the ftp:// scheme.
        if (serverUri->Scheme != Uri::UriSchemeFtp)
        {
            return false;
        }
        // Get the object used to communicate with the server.
        // Note that the cast to FtpWebRequest is done only
        // for the purposes of illustration. If your application
        // does not set any properties other than those defined in the
        // System.Net.WebRequest class, you can use the following line instead:
        // WebRequest request = WebRequest.Create(serverUri);
        //
        FtpWebRequest* request = dynamic_cast<FtpWebRequest*>(WebRequest::Create(serverUri));
        request->Method = FtpMethods::DownloadFile;

        FtpWebResponse* response = dynamic_cast<FtpWebResponse*> (request->GetResponse());

        Stream* responseStream = 0;
        StreamReader* readStream = 0;
        StreamWriter* writeStream = 0;
        try
        {
            responseStream = response->GetResponseStream(); 
            readStream = new StreamReader(responseStream, System::Text::Encoding::UTF8);
            // Display information about the data received from the server.
            Console::WriteLine(S"Bytes received: {0}", __box(response->ContentLength));   

            Console::WriteLine(S"Message from server: {0}", response->StatusDescription);
            Console::WriteLine(S"Resource: {0}", response->ResponseUri);

            // Write the bytes received from the server to the local file.
            if (readStream != 0)
            {
                writeStream = new StreamWriter(localFileName, false);
                writeStream->Write(readStream->ReadToEnd());
            }
        }
        __finally
        {
            if (readStream != 0)
            {
                readStream->Close();
            }
            if (response != 0)
            {
                response->Close();
            }
            if (writeStream != 0)
            {
                writeStream->Close();
            }
        }
        return true;
    }
Platforms

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Version Information

.NET Framework

Supported in: 3.5, 3.0, 2.0
See Also

Reference

Tags :


Community Content

Alsup
GetFileSize

According to the remarks above, when using the GetFileSize method, ContentLength returns the size of the specified file on the server. That does not appear to be the case, at least on my server. ContentLength always returns zero. The only way I can get the file size is to parse the second part of StatusDescription (e.g., StatusDescription of "200 1653996" means the file size is 1653996). I don't know if it behaves the same on all servers.

Tags : contentbug

Page view tracker