2013-02-20 84 views
6

मैं अपने स्थानीय भंडारण में फ़ाइल को हटाने के लिए सफलता की कोशिश करता हूं। बिल्कुल, मैंने एक फोटो लिया और मैं बाद में इसे एक बटन के साथ मिटाना चाहता हूं। लेकिन जब मैं बटन पर क्लिक करता हूं, ऐप कीड़े और मेरे पास है: "एक्सेस अस्वीकृत"।Winrt पर स्थानीय स्टोरेज में फ़ाइल को कैसे हटाएं?

मैंने स्टोरेजफ़ाइल में फ़ाइल प्राप्त करने के बाद एक साधारण Delet.Async() sude।

private async void delete_click(object sender, RoutedEventArgs e) 
    { 

      StorageFile filed = await ApplicationData.Current.LocalFolder.GetFileAsync("myImg.jpg"); 
      if (filed != null) 
      { 
       await filed.DeleteAsync(); 

      } 


    } 
+3

को नष्ट करेगा शायद फ़ाइल कुछ और कहाँ खोला है करना चाहते हैं? अगर आप इसे एक तस्वीर नियंत्रण में देख सकते हैं या ऐसा कुछ भी हो सकता है कि डिलीट –

+0

नहीं चला सका तो मैं उस दिशा में देखूंगा – Sw1a

+3

यदि आप बिटमैपडेकोडर या बिटमैप इमेज में फोटो लोड करते हैं तो इसे तब तक बंद कर दिया जाएगा जब तक बिटमैप डिकोडर या बिटमैप इमेज यदि आप BitmapCacheOption.OnLoad निर्दिष्ट नहीं करते हैं तो प्रयोग किया जाता है। फिर आपको पहुंच से वंचित कर दिया जाता है। –

उत्तर

7

यह देखने के लिए नीचे दिए गए कोड को आज़माएं कि यह आपके लिए काम करता है या नहीं।

private async void takephoto_click(object sender, RoutedEventArgs e) 
    { 


     var ui = new CameraCaptureUI(); 
     ui.PhotoSettings.CroppedAspectRatio = new Size(4, 3); 
     var file = await ui.CaptureFileAsync(CameraCaptureUIMode.Photo); 

     if (file != null) 
     { 
      // store the file 
      var myFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("myImg.jpg"); 
      await file.MoveAndReplaceAsync(myFile); 

      // display the file 
      var bitmap = new BitmapImage(); 
      bitmap.SetSource(await file.OpenAsync(FileAccessMode.Read)); 
      Photo.Source = bitmap; 
     } 



    } 

    private async void delete_click(object sender, RoutedEventArgs e) 
    { 
     StorageFile filed = await ApplicationData.Current.LocalFolder.GetFileAsync("myImg.jpg"); 
     if (filed != null) 
     { 
      await filed.DeleteAsync(); 
     } 

     StorageFile filefound = await ApplicationData.Current.LocalFolder.GetFileAsync("myImg.jpg"); 

     if (filefound != null) 
     { 
      // do something here 
     } 
    } 
+0

मैं कोशिश करूँगा। धन्यवाद – Sw1a

+0

इस समाधान के साथ समस्या यह है कि दूसरा "GetFileAsync" ऑपरेशन WIndows RT के वर्तमान कार्यान्वयन के बाद 'शून्य' वापस नहीं करेगा। इसके बजाय, जब 'GetFileAsync' अनुरोधित फ़ाइल को ढूंढने में विफल रहता है, तो यह एक खाली बनाता है और देता है, इसलिए, इस कोड के साथ, आप कभी भी फ़ाइल में फ़ाइल को हटाने की पुष्टि करने में सक्षम नहीं होंगे। एक बेहतर समाधान एक कोशिश/पकड़ ब्लॉक के अंदर प्रतीक्षा 'DeleteAsync' फ़ंक्शन को कॉल करना है और फिर अपवाद को संभालना है - एक अपवाद बगड़ी और समस्याग्रस्त दूसरे 'GetFileAsync' कॉल के बिना अनुरोधित विलोपन की विफलता का संकेत देगा। – Epsilon3

0

मुझे स्थानीय संग्रहण से फ़ाइल हटाने में एक ही समस्या है। स्थानीय स्टोरेज में अलग-अलग नामों के साथ संग्रहीत कई फाइलें हैं ताकि अन्य फाइलों को कैसे हटाया जा सके। उपर्युक्त मामले में आपने फ़ाइल नाम को हटाने के लिए कड़ी मेहनत की है।

स्टोरेजफ़ाइल फ़ाइलफ़ाउंड = एप्लिकेशनडेटा का इंतजार करें। वर्तमान। लोकलफोल्डर.गेटफाइलएसिंक ("myImg.jpg"); उपयोगकर्ता myImg.jpg के बजाय तो अन्य फ़ाइल delte करने के लिए कैसे उपयोगकर्ता

0
/// <summary> 
    /// Delete the indicated application file 
    /// </summary> 
    /// <param name="strFilePathName">The file path name to delete</param> 
    /// <returns>True, if successful; else false</returns> 
    public async static Task<bool> DeleteAppFile(string strFilePathName) 
    { 
     try 
     { 
      StorageFile fDelete = null; 

      if (!strFilePathName.Equals("")) 
      { 
       fDelete = await ApplicationData.Current.LocalFolder.GetFileAsync(strFilePathName); 
       if (fDelete != null) 
       { 
        try 
        { 
         await fDelete.DeleteAsync(); 
        } 
        catch (Exception ex) 
        { 
         AFFECTS.App.ShowMessage(true, "Error", "DeleteAppFile {" + strFilePathName + "}", ex.Message); 

         return false; 
        } 

        return true; 
       } 
      } 
      else 
       AFFECTS.App.ShowMessage(true, "Error", "DeleteAppFile", "File path name is empty."); 
     } 
     catch (Exception ex) 
     { 
      AFFECTS.App.ShowMessage(true, "Error", "DeleteAppFile {" + strFilePathName + "}", ex.Message); 
     } 

     return false; 
    } 
+0

क्या हटाएं 'DeleteAsync' अपवाद फेंक सकता है? Intellisense संकेत नहीं करता है कि किसी भी अपवाद फेंक दिया जा सकता है। इसके अलावा, अगर फ़ाइल मौजूद है, तो सफलता की गारंटी है? –

+0

यदि फ़ाइल मौजूद नहीं है तो यह वास्तव में 'FileNotFoundException' फेंक देगा। मुझे नहीं लगता कि 'DeleteAsync' कॉल को 'try/catch' में डालने का कोई कारण है क्योंकि यदि' स्टोरेजफ़ाइल 'ऑब्जेक्ट बनाया जा सकता है, तो यह मौजूद है। फ़ाइल मौजूद नहीं होने पर एमएसडीएन पर खाली 'स्टोरेजफाइल' ऑब्जेक्ट वापस करने का सुझाव देने के लिए कुछ भी नहीं है; इसलिए, 'अगर (fDelete! = null) 'पर्याप्त होगा। मुझे नहीं लगता कि एक्सेस एक मुद्दा है क्योंकि आपको स्वचालित रूप से स्थानीय संग्रहण तक पहुंच प्रदान की जाती है। –

+0

कोशिश/पकड़ वाक्यविन्यास आदत है - ब्लॉक में अन्य कथन हैं जो अपवाद फेंक सकते हैं - मेरे कोड को दुर्लभ बिट के अनुरूप बनाने के बजाय, मैं उन्हें सभी को समाहित करता हूं। मैं बहुत सारे बग्गी कार्यक्रमों का उपयोग करता हूं जो कुछ भी कोशिश करने के लिए समय नहीं लेते हैं। – Epsilon3