2013-02-01 12 views
9

現在、カメラからローカルストレージフォルダに戻ったjpeg画像を含むストリームを保存しようとしています。ファイルは作成されていますが、残念ながらデータがまったく含まれていません。ここで私が使用しようとしているコードは次のとおりです。Windows Phone 8のローカルフォルダに画像を含むストリームを保存しています。

public async Task SaveToLocalFolderAsync(Stream file, string fileName) 
{ 
    StorageFolder localFolder = ApplicationData.Current.LocalFolder; 
    StorageFile storageFile = await localFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting); 

    using (IRandomAccessStream fileStream = await storageFile.OpenAsync(FileAccessMode.ReadWrite)) 
    { 
    using (IOutputStream outputStream = fileStream.GetOutputStreamAt(0)) 
    { 
     using (DataWriter dataWriter = new DataWriter(outputStream)) 
     { 
     dataWriter.WriteBytes(UsefulOperations.StreamToBytes(file)); 
     await dataWriter.StoreAsync(); 
     dataWriter.DetachStream(); 
     } 
     await outputStream.FlushAsync(); 
    } 
    } 
} 

public static class UsefulOperations 
{ 
    public static byte[] StreamToBytes(Stream input) 
    { 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     input.CopyTo(ms); 
     return ms.ToArray(); 
    } 
    } 
} 

すべてのヘルプファイルの保存この方法は非常に高く評価されるだろう - 私がオンライン発見したすべてのヘルプは、テキストの保存を参照してください。私はWindows.Storage名前空間を使用しているので、Windows 8でも動作するはずです。

+0

これはWindows Phone 8ですか?あなたは 'IsolatedStorageFile.GetUserStoreForApplication()'を使用していません –

+1

上記の名前空間を使用できるようになり、コードはWindows 8でも動作します。 –

+0

毎日新しい何かを学んでください:) –

答えて

26

あなたの方法SaveToLocalFolderAsyncはうまくいきます。 Streamで試してみましたが、期待通りに完全な内容をコピーしました。

これは、メソッドに渡すストリームの状態に問題があると思います。たぶん、最初にその位置をfile.Seek(0, SeekOrigin.Begin);で設定する必要があります。それでも問題が解決しない場合は、そのコードを質問に追加してください。

また、コードをもっと簡単にすることができます。以下は中間クラスがない場合と全く同じです:

public async Task SaveToLocalFolderAsync(Stream file, string fileName) 
{ 
    StorageFolder localFolder = ApplicationData.Current.LocalFolder; 
    StorageFile storageFile = await localFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting); 
    using (Stream outputStream = await storageFile.OpenStreamForWriteAsync()) 
    { 
     await file.CopyToAsync(outputStream); 
    } 
} 
+0

おかげで、そうかもしれない、私は今日見ています。 –

+0

あなたは正しいです、ストリームの位置は最後にありました。学校少年の間違い。上記のコードははるかに簡単なので、代わりに使用する予定です。ありがとうございました –

+0

私はそれを誤って落としました。あなたはそれを少し編集して再投票することができますか? –

関連する問題