how to download the azure blob snapshots using c sharp in windows form application
<p>I am creating windows application using c sharp to manage azure blobs.I am able to upload the blobs,download the blobs,take snapshot ,list the blobs etc.Now my task in download the snapshots of blobs(download the older vertion of the file).</p>

<p>i am downloading blob file using the following code</p>

<pre><code>StorageCredentials creds = new StorageCredentials(accountName, accountKey);
        CloudStorageAccount account = new CloudStorageAccount(creds, useHttps: true);

        //MessageBox.Show(sender.ToString());
        Uri myUri;
        string uri;
        var btn = sender as Button;
        uri = btn.Text;
        if (btn != null)
        {
            // MessageBox.Show(btn.Text);

            myUri = new Uri(btn.Text);
            MessageBox.Show(myUri.ToString());

        }
        // Create the blob client.
        CloudBlobClient blobClient = account.CreateCloudBlobClient();
        // Retrieve reference to a previously created container.
        CloudBlobContainer container = blobClient.GetContainerReference("samples");
        //CloudBlobContainer sampleContainer = client.GetContainerReference("samples");

        string[] parts = uri.Split('/');
        string fileName = "";

        if (parts.Length &gt; 0)
            fileName = parts[parts.Length - 1];
        else
            fileName = uri;


        CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName);

        // Save blob contents to a file.
        try
       {


            using (var fileStream =        System.IO.File.OpenWrite(@"C:\Users\dev1\Desktop\rakshi1.jpg"))
            {
                blockBlob.DownloadToStream(fileStream);
            }
        }

        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
</code></pre>

<p>I am listing the snapshot of perticular blob using the following code</p>

<pre>

private void button1_Click(object sender, EventArgs e)
        {
            //MessageBox.Show(this.filename);
            //label1

            string s1= this.filename;
            string accountName = "portalvhdsq3jyv0y3gccrn";
            string accountKey = "VVPgjNO9V3397kOvoJRRZKtZVZaVNQP2xFPTNoWEp8zPJh4n487HVmwup498T8iufFnDS1Icu0EmUKyHg+DdkA==";


            StorageCredentials creds = new StorageCredentials(accountName, accountKey);
            CloudStorageAccount account = new CloudStorageAccount(creds, useHttps: true);
            CloudBlobClient client = account.CreateCloudBlobClient();
            CloudBlobContainer sampleContainer = client.GetContainerReference("samples");
            sampleContainer.CreateIfNotExists();
            CloudBlockBlob blob = sampleContainer.GetBlockBlobReference(s1);

            CloudBlockBlob newBlob;

            //set the metadata and save it 
            blob.Metadata["OriginalFilename"] = s1;
            blob.SetMetadata();
            //create the snapshot
            newBlob = blob.CreateSnapshot();
            /*
             label3.Text ="Metadata['OriginalFilename'] = {0}, IsSnapshot = {1}, " + "SnapshotTime = {2}, snapshotURI = {3}"+ "   "+newBlob.Metadata["OriginalFilename"]+"  "+newBlob.IsSnapshot+" "+newBlob.SnapshotTime+" "+newBlob.SnapshotQualifiedUri;
             */
          //  label3.Text = "";
            string text1 = "";
            //retrieve all of the versions for this blob, then iterate through them
            IEnumerable listOfBlobs = sampleContainer.ListBlobs(s1, true, BlobListingDetails.Snapshots);
            foreach (IListBlobItem blobItem in listOfBlobs)
            {
                //you must cast this as a CloudBlockBlob 
                //  because blobItem does not expose all of the properties
                CloudBlockBlob theBlob = blobItem as CloudBlockBlob;

                //Call FetchAttributes so it retrieves the metadata.
                theBlob.FetchAttributes();

                //print the snapshot informatino
                /*  System.Diagnostics.Debug.Print("theBlob IsSnapshot = {0}, SnapshotTime = {1}, snapshotURI = {2}",
                    theBlob.IsSnapshot, theBlob.SnapshotTime, theBlob.SnapshotQualifiedUri);*/

               // text1 = text1 + "theBlob IsSnapshot = {0}, SnapshotTime = {1}, snapshotURI = {2}" + " @" + theBlob.IsSnapshot + " " + theBlob.SnapshotTime + " " + theBlob.SnapshotQualifiedUri;



                //in case there's more than one piece of metadata, 
                //  iterate through the metadata and display each key-value pair
                int index = 0;
                foreach (KeyValuePair kvPair in theBlob.Metadata)
                {
                    index++;
               //     text1 = text1 + "@.MetaData {0} = {1},{2}@" + index + kvPair.Key + kvPair.Value;
                }
                createButton(theBlob.SnapshotQualifiedUri);
           //     text1 = text1 + "@@@";
                MessageBox.Show(theBlob.SnapshotQualifiedUri.ToString());

            }
        //    text1 = text1.Replace("@", System.Environment.NewLine);

          //  label1.Text = text1;
            button2.Enabled = true;
        }

</pre>

<p>But i have no idea how to download each snapshots</p>

<p>i am updating this code with create_button and btn_click method</p>

<pre>




    private void createButton(Uri uri1)
        {
            MessageBox.Show("hhhhhhhis");

            //This block dynamically creates a Button and adds it to the form
            Button btn = new Button();
            btn.Name = "btn1";
            btn.Location = new Point(3 + i, 14 + x);
            btn.BackColor = System.Drawing.Color.White;
            btn.Text = uri1.ToString();
            btn.Width = 370;
            btn.TextAlign = ContentAlignment.MiddleLeft;
            //Hook our button up to our generic button handler
            btn.Click += new EventHandler(btn_Click);
            this.Controls.Add(btn);
            //  textBox1.Text = textBox1.Text + "hai";
            //i += 20;
            x += 30;

        }



 void btn_Click(object sender, EventArgs e)
        {
            StorageCredentials creds = new StorageCredentials(accountName, accountKey);
            CloudStorageAccount account = new CloudStorageAccount(creds, useHttps: true);

            //MessageBox.Show(sender.ToString());
            Uri myUri;
            string uri;
            var btn = sender as Button;
            uri = btn.Text;
            if (btn != null)
            {
                // MessageBox.Show(btn.Text);

                myUri = new Uri(btn.Text);
                MessageBox.Show(myUri.ToString());

            }
            // Create the blob client.
            CloudBlobClient blobClient = account.CreateCloudBlobClient();
            // Retrieve reference to a previously created container.
            CloudBlobContainer container = blobClient.GetContainerReference("samples");
            //CloudBlobContainer sampleContainer = client.GetContainerReference("samples");
            // Retrieve reference to a blob named "photo1.jpg".
            string[] parts = uri.Split('/');
            string fileName = "";

            if (parts.Length > 0)
                fileName = parts[parts.Length - 1];
            else
                fileName = uri;
            // MessageBox.Show(fileName);

            CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName);

            // Save blob contents to a file.
            try
            {
                // using (Stream outputFile = new FileStream("rakshi.jpg", FileMode.Create))
                //{
                //blockBlob.DownloadToStream(outputFile);
                //}


                using (var fileStream = System.IO.File.OpenWrite(@"C:\Users\dev1\Desktop\rakshi1.jpg"))
                {
                    blockBlob.DownloadToStream(fileStream);
                }
            }

            catch (Exception ex)
            {
                // Console.WriteLine(ex);
                MessageBox.Show(ex.ToString());
            }







        }



</pre>

<p>Create_button() function calls for each snapshot and display another form with list of button coresponds to snapshots when i click on the button i should  download the snapshot.but now it fires some exception</p>