2016-07-21 45 views
0

OneDrive SDKを使用してOneDriveからファイルをダウンロードしようとしています。私は作成したUWPアプリを持っています。OneDrive SDKを使用してOneDriveからファイルをダウンロードします。

私はOneDriveアカウントに接続しましたが、そこから何をするのか分かりません。そこには多くの回答がありますが、新しいOneDrive SDKには関係していないようです。

私はこのメソッドをC#で使いたいと思います。

StorageFile downloadedDBFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("\\shared\\transfers\\" + App.dbName, CreationCollisionOption.ReplaceExisting); 
Item item = await oneDriveClient.Drive.Root.ItemWithPath("Apps/BicycleApp/ALUWP.db").Request().GetAsync(); 

oneDriveClientが正常に接続します。私も "アイテム"を取得します。ご覧のとおり、OneDriveのサブディレクトリにあります。

私は、サブディレクトリにdownloadsDBFileというローカルファイルを作成しました。そのため、OneDriveファイルの内容をコピーできます。

ここからは何をしますか?

この方法を使用してOneDriveに問題なくファイルをアップロードしました。事前

答えて

3

IStorageFolder sf = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFolderAsync("shared\\transfers"); 
var folder = ApplicationData.Current.LocalFolder; 
var files = await folder.GetFilesAsync(); 

StorageFile dbFile = files.FirstOrDefault(x => x.Name == App.dbName); 
await dbFile.CopyAsync(sf, App.dbName.ToString(), NameCollisionOption.ReplaceExisting); 
StorageFile copiedFile = await StorageFile.GetFileFromPathAsync(Path.Combine(ApplicationData.Current.LocalFolder.Path, "shared\\transfers\\" + App.dbName)); 

var randomAccessStream = await copiedFile.OpenReadAsync(); 
Stream stream = randomAccessStream.AsStreamForRead(); 


var item = await oneDriveClient.Drive.Special.AppRoot.Request().GetAsync(); 

txtOutputText.Text = "Please wait. Copying File"; 

using (stream){var uploadedItem = await oneDriveClient.Drive.Root.ItemWithPath("Apps/BicycleApp/ALUWP.db").Content.Request().PutAsync<Item>(stream);} 

おかげであなたが戻ってきている項目オブジェクトは、それがおそらくファイルに関する情報ですが、ファイルの内容ではありません。代わりに、Contentプロパティを使用してファイルの内容をストリームとして取得し、ファイルにコピーする必要があります。コードは次のようになります。

using (var downloadStream = await oneDriveClient.Drive.Root.ItemWithPath("Apps/BicycleApp/ALUWP.db").Content.Request().GetAsync()) 
{ 
    using (var downloadMemoryStream = new MemoryStream()) 
    { 
     await downloadStream.CopyToAsync(downloadMemoryStream); 
     var fileBytes = downloadMemoryStream.ToArray(); 
     await FileIO.WriteBytesAsync(downloadedDBFile, fileBytes); 
    } 
} 

Itemオブジェクトの代わりにストリームを返すOneDriveの呼び出しには.Contentがあります。

関連する問題