2017-02-14 31 views
0

私は、ファイルを変換し、変換されたPDFファイルを実際にはPOSTメソッドの標準HttpClientを使用して返送するAPIサービスを持っています。ディスク上にファイルの物理コピーは必要ありませんが、それに相当するのはStorageFileクラスです。私はStorageFileクラスを使用して、それのコンテンツを取得する際UWPのファイルコンテンツを持つStorageFileクラスを使用する[ユニバーサルWindowsプラットフォーム]

  1. がどのようにファイルを作成する:

    私はどこにでも答えを見つけることができなかったために、このトピックに関するいくつかの質問がありますか?または、別のクラスを使用して最初にファイル(ファイルなど)を作成する必要がありますか? UWPでお勧めですか?

  2. ファイルの物理コピーを作成せずにStorageFileクラスを使用する方法はありますか?

  3. どのオプションが優れていますか?最初にファイルを一時フォルダに保存してから使用するか、直接StorageFileクラスを作成しますか?どうして?私はStorageFileクラスを使用して、それの内容を取得するときに、ファイルを作成する方法

答えて

2

?または、別のクラスを使用して最初にファイル(ファイルなど)を作成する必要がありますか? UWPでお勧めですか?

受信したコンテンツは、一般に文字列形式です。いくつかの場所に新しい空白ファイルを作成する必要があります。現在のアプリケーションのローカルフォルダがよくあります。次に、作成したばかりのファイルにコンテンツを書き込んでください。ここでは非常にサンプルのデモは、次のとおりです。StorageFileでファイルを作成し、作成する方法について

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); 

詳細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を新しいクラスの変数としてメモリに保持することもできます。

関連する問題