0

skydrive フォルダから画像をダウンロードしています。画像がダウンロードされたら、「pictures」というフォルダに保存する必要があります

しかし、ダウンロードしたファイルの名前を取得するにはどうすればよいですか? 次のコードを試しましたが、fsはnullを返します

private void download()
        {
            if (ControlBackup_ID != null)
            {               
                foreach (string it in contenidoSkyPic)
                {
                    //MessageBox.Show (it);
                    infoTextBlock3.Text = "Downloading backup pictures..wait...";

                    client.DownloadAsync(it + "/content");
                    client.DownloadCompleted += new EventHandler<LiveDownloadCompletedEventArgs>(client_DownloadCompleted);
                }               
            }
            else
                MessageBox.Show("Backup file of pictures doesn't exist!", "Error", MessageBoxButton.OK);
        }



void client_DownloadCompleted(object sender, LiveDownloadCompletedEventArgs e)
    {
        if (e.Error == null)
        {
             Stream stream = e.Result; //Need to write this into IS
             FileStream fs = stream as FileStream;

             if (fs != null)
             {
                 try
                 {
                     using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
                     {
                         using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile("pictures\\" + fs.Name, FileMode.Create))
                         {
                             stream.CopyTo(fileStream);
                             cantImatges_progreso_down += 1;
                         }
                     }
                 }
                 catch { }

                 if (cantImatges_progreso_down == contenidoSkyPic.Count())
                 {
                     infoTextBlock3.Text = "Restore pictures completed!";
                 }
             }

        }
        else
        {
            // process error  
            MessageBox.Show("Restore pictures failed.", "Failure", MessageBoxButton.OK);
        }

        client.DownloadCompleted -= client_DownloadCompleted;            


    }
4

2 に答える 2

1

最後に、私はこの解決策を見つけました。「 userstate」を使用してファイル名を渡すことができることを確認しました

解決:

skydrive フォルダーをスキャンすると、ID とファイル名が保存されます。

List<KeyValuePair<string, string>> contenidoSkyPic ;

 void getFilesImatges_GetCompleted(object sender, LiveOperationCompletedEventArgs e)
 {
     List<object> data = (List<object>)e.Result["data"];

            contenidoSkyPic = new List<KeyValuePair<string, string>>();
            contenidoSkyPic.Clear();


            foreach (IDictionary<string, object> content in data)
            {
                contenidoSkyPic.Add(new KeyValuePair<string, string>((string)content["id"], (string)content["name"]));   
            }


}

次に、「ダウンロード」は次のようになります。

private void download()
        {
            if (ControlBackup_ID != null)
            {               
                foreach (string it in contenidoSkyPic)
                {
                    //MessageBox.Show (it);
                    infoTextBlock3.Text = "Downloading backup pictures..wait...";


LiveConnectClient client = new LiveConnectClient(session);
client.DownloadCompleted += new EventHandler<LiveDownloadCompletedEventArgs>(client_DownloadImatgesCompleted);
client.DownloadAsync(it.Key + "/content", it.Value );

                }               
            }
            else
                MessageBox.Show("Backup file of pictures doesn't exist!", "Error", MessageBoxButton.OK);
        }

ダウンロードが完了するたびにclient_DownloadCompletedが呼び出され、各ファイルの名前を取得できる場合:

void client_DownloadCompleted(object sender, LiveDownloadCompletedEventArgs e)
    {
        if (e.Error == null)
        {
             Stream stream = e.Result; //Need to write this into IS
            string _namePicture = e.UserState.ToString();


                 try
                 {
                     using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
                     {
                         using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile("pictures\\" + _namePicture , FileMode.Create))
                         {
                             stream.CopyTo(fileStream);
                             cantImatges_progreso_down += 1;
                         }
                     }
                 }
                 catch { }

                 if (cantImatges_progreso_down == contenidoSkyPic.Count())
                 {
                     infoTextBlock3.Text = "Restore pictures completed!";
                 }
             }


        client.DownloadCompleted -= client_DownloadCompleted;            


    }
于 2012-06-02T09:40:30.073 に答える
0

これを実装する最善の方法は、バックグラウンド プロセスを使用することです。

実装例は次の場所にあります。

http://msdn.microsoft.com/en-us/library/hh202959(v=vs.92).aspx

しかし、ニーズにより適したソリューションは、次の Skydrive ブラウザーの例です。

http://code.msdn.microsoft.com/MetroSky-A-Complete-4250b80f または https://stackoverflow.com/questions/7346450/download-file-from-skydrive

于 2012-05-30T15:41:01.897 に答える