2013-07-11 41 views
0

我想将文本文件myFile.txt上传到SkyDrive。下面是代码:如何将文件从IsolatedStorage上传到SkyDrive?

private async void btnUpload_Click(object sender, System.Windows.RoutedEventArgs e) 
{ 
    Client = new LiveConnectClient(_session); 
    string filename = "myFile.txt"; 

    var isolatedstorageFile= await ApplicationData.Current.LocalFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting); 

    using (StreamWriter writer = new StreamWriter(await isolatedstorageFile.OpenStreamForWriteAsync())) 
    { 
     // convert to string 
     var _String = Serialize("this is a test file"); 
     await writer.WriteAsync(_String); 
    } 

    await Client.BackgroundUploadAsync(FolderID, new Uri(isolatedstorageFile.Path), OverwriteOption.Overwrite); 
} 

FolderID是全球性的,具有的价值:“folder.17ff6230f5f26b89.17FF6230F5F26B89 1533”

的问题是在定义BackgroundUploadAsync的第二个参数。我该如何解决它,即指定“myFile.txt”IsolatedStorage文件所在的URI?

感谢,

回答

0

您传递BackgroundUploadAsync,其中第一个是FolderId 3个参数,二是文件,这是不对的检查documentation first的路径,第二个参数需要的文件名只不是文件的路径第三个是文件流。您可以使用UploadAsync而不是BackgroundUploadAsync

IsolatedStorageFileStream isfs = isf.OpenFile(FileName, FileMode.Open, FileAccess.Read); 

    var res = await client.UploadAsync(folderId, FileName, isfs, OverwriteOption.Overwrite); 
+0

他对'BackgroundUploadAsync'的调用是正确的,这是在Windows Phone中完成的。问题在于Uri通过了该方法。 – anderZubi

0

使用this link作为参考。

您在上传时遇到问题,我想这是因为您正在尝试上传不在共享/传输文件夹中的文件进行隔离存储。所以只需在共享/传输中创建文件,然后尝试将文件上传到天空驱动器。

0

为了使用BackgroundUploadAsync方法从独立存储上传文件,您需要正确的文件URI。访问存储在独立存储中的文件的路径是/shared/transfers/。因此,要将URI参数传递给该方法,请将/shared/transfers/加上文件名。这将是有效的URI。请看下图:

await Client.BackgroundUploadAsync(FolderID, new Uri("/shared/transfers/" + fileName, UriKind.Relative), OverwriteOption.Overwrite); 

另一种选择是使用UploadAsync方法和附加流。

0

感谢所有我得到的指针。重写该功能,它是这样的:

private async void btnUpload_Click(object sender, System.Windows.RoutedEventArgs e) 
     { 
     string filename = "myFile.txt"; 

     StorageFolder folder = await ApplicationData.Current.LocalFolder.CreateFolderAsync("Shared", CreationCollisionOption.OpenIfExists); 
     folder = await folder.CreateFolderAsync("transfers", CreationCollisionOption.OpenIfExists); 

     var isolatedstorageFile= await folder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting); 
     using (StreamWriter writer = new StreamWriter(await isolatedstorageFile.OpenStreamForWriteAsync())) 
      { 
      // convert to string 
      var _String = Serialize("this is a test file"); 
      await writer.WriteAsync(_String); 
      } 

     await LiveHelper.Client.BackgroundUploadAsync(FolderID, new Uri("/shared/transfers/" + filename, UriKind.Relative), OverwriteOption.Overwrite); 
     } 


    private static string Serialize(object objectToSerialize) 
     { 
     using (MemoryStream _Stream = new MemoryStream()) 
      { 
      try 
       { 
       var _Serializer = new DataContractJsonSerializer(objectToSerialize.GetType()); 
       _Serializer.WriteObject(_Stream, objectToSerialize); 
       _Stream.Position = 0; 
       StreamReader _Reader = new StreamReader(_Stream); 
       return _Reader.ReadToEnd(); 
       } 
      catch (Exception e) 
       { 
       Debug.WriteLine("\n******** Serialize:" + e.Message); 
       return string.Empty; 
       } 
      } 
     } 

该文件被上传到正确的FolderID。

埃坦

0

要上传文件到SkyDrive中,该文件应在内部保存IsolatedStorage“/共享/传输/”文件夹。 LiveConnectClient只能上传/下载文件“/ shared/transfers /”。

相关问题