2017-02-14 57 views
0

我有一個轉換文件,併發送回一個轉換的PDF文件的API服務,其實它的內容,使用標準HttpClient與POST方法。我不需要我的磁盤上的文件的物理副本,但它的作用類似於StorageFile類。使用具有UWP文件內容StorageFile類[通用Windows平臺]

我有一個關於這個話題,我到處都找不到答案的一些問題:

  1. 如何創建一個文件時,我得到使用StorageFile類的它裏面的內容?或者我需要使用另一個類來初始創建文件(例如文件)?在UWP中推薦嗎?

  2. 是否有使用StorageFile類,而無需創建文件的物理副本的方法嗎?

  3. 什麼選擇更好 - 首先將文件保存在臨時文件夾中,然後使用它或直接創建StorageFile類?爲什麼?

回答

2

如何創建一個文件時,我得到使用StorageFile類的它裏面的內容?或者我需要使用另一個類來初始創建文件(例如文件)?在UWP中推薦嗎?

接收的內容通常是字符串格式。您可能需要在某個地方創建一個新的空白文件,通常是當前應用程序的本地文件夾。然後,將內容寫入您剛剛創建的文件。這裏是一個非常樣本演示:

string content = "postcontent"; 
StorageFolder localfolder = Windows.Storage.ApplicationData.Current.LocalFolder; 
Windows.Storage.StorageFile sampleFile = await localfolder.CreateFileAsync("sample.pdf", Windows.Storage.CreationCollisionOption.ReplaceExisting); 
await Windows.Storage.FileIO.WriteTextAsync(sampleFile, content); 

詳細瞭解如何創建並寫入一個文件StorageFile請參考this article。請注意,這只是一個簡單的創建和編寫文件示例,對於真正的pdf文件,這需要複雜的格式化內容寫入文件。

StorageFile類是UWP文件操作,我們使用這個類來創建並寫入文件,都可能不需要其他類。 File屬於System.IO類的名稱空間也應該在uwp中使用,但建議使用StorageFile

是否有使用StorageFile類,而無需創建一個文件

恐怕不是一個物理副本的方式。正如我上面所說StorageFile是用於訪問文件對象,如果沒有文件如何訪問?您收到的內容不應該是文件對象,它們可能是文本或文件流。

什麼選擇更好 - 首先將文件保存在臨時文件夾中,然後使用它或直接創建StorageFile類?爲什麼?

創建一個臨時文件,你將有一個StorageFile實例,那麼你應該能夠編寫由StorageFile目標文件流的接收到的內容。似乎在本地文件夾中創建臨時文件是更好的方法,因爲StorageFile可能不會由http內容創建。

此外,UWP中的文件訪問權限有我們可能需要注意的特殊權限,詳情可以參考。

2

您可以使用the StorageFile.CreateStreamedFileAsync method來創建虛擬StorageFile。你給它一個名字,一個委託和一個可選的縮略圖。當有人試圖訪問虛擬StorageFile的內容時,您的委託將被調用,其作業是用數據填充提供的輸出流。

速寫:

private async Task<StorageFile> ConvertFileAsync(StorageFile originalFile) 
{ 
    var resultBuffer = await PostFileToServiceAndGetResultAsync(originalFile); 

    return 
     await StorageFile.CreateStreamedFileAsync("result.pdf", 
      async (request) => { 
       using (request) 
       { 
        await request.WriteAsync(resultBuffer); 
       } 
      }, null); 
} 

又如可以發現on MSDN

0

將它保存到臨時存儲器可能是最簡單的,但您也可以自己實施IStorageFile,並將您下載的pdf作爲新類中的變量保存在內存中。

相關問題