2013-02-01 45 views
9

पर स्थानीय फ़ोल्डर में एक छवि युक्त एक स्ट्रीम सहेजना मैं वर्तमान में एक जेपीईजी छवि युक्त स्ट्रीम को सहेजने की कोशिश कर रहा हूं जिसे मैं कैमरे से स्थानीय स्टोरेज फ़ोल्डर में वापस मिला हूं। फाइलें बनाई जा रही हैं लेकिन दुर्भाग्य से कोई डेटा नहीं है। - सभी मदद मैं ऑनलाइन पाया है पाठ को सहेजने का उल्लेखविंडोज फोन 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(); 
    } 
    } 
} 

किसी भी मदद फ़ाइलों इस तरह से बचत बहुत सराहना की जाएगी: यहाँ कोड मैं उपयोग करने के लिए कोशिश कर रहा हूँ है। मैं विंडोज़ का उपयोग कर रहा हूं। स्टोरेज नेमस्पेस ताकि इसे विंडोज 8 के साथ भी काम करना चाहिए।

+0

क्या आप वाकई विंडोज फोन 8 हैं? आप 'IsolatedStorageFile.GetUserStoreForAplication()' –

+1

का उपयोग नहीं कर रहे हैं, बिल्कुल यकीन है कि अब आप उपरोक्त नामस्थान का उपयोग कर सकते हैं और कोड विंडोज 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

दंडित, मैंने इसे गलती से घटा दिया। क्या आप इसे थोड़ा संपादित कर सकते हैं ताकि मैं फिर से मतदान कर सकूं? –