2012-03-06 8 views
6

निम्न कोड कभी-कभी इस स्टैकट्रस का उत्पादन करता है। ऐसा लगता है कि यह ढांचे के भीतर हो रहा है जब आंतरिक FileStream ऑब्जेक्ट पर निपटान विधि कहा जाता है? मुझे लगता है कि किसी भी विचार, एक बग की तरह लगता है?मोनो टच फ़ाइल। रीडअल्टटेक्स्ट आंतरिक फ़ाइलस्ट्रीम पर अपवाद फेंकता है। डिस्प्ले()

var previousVersion = long.Parse(File.ReadAllText(Paths.VersionFile)); 

StackTrace:

System.IO.IOException: Invalid parameter 
     at System.IO.FileStream.Dispose (Boolean disposing) [0x00000] in <filename unknown>:0 
     at System.IO.Stream.Close() [0x00000] in <filename unknown>:0 
     at System.IO.StreamReader.Dispose (Boolean disposing) [0x00000] in <filename unknown>:0 
     at System.IO.TextReader.Dispose() [0x00000] in <filename unknown>:0 
     at System.IO.File.ReadAllText (System.String path) [0x00000] in <filename unknown>:0 
     at CatalystHD.Shared.BaseLoginController.CheckIfFirstRunThisVersion() [0x00000] in <filename unknown>:0 
     at CatalystHD.Shared.BaseLoginController.ViewDidLoad() [0x00000] in <filename unknown>:0 
     at MonoTouch.UIKit.UIViewController.get_View() [0x00000] in <filename unknown>:0 
     at CatalystHD.IPad.RootViewController.AnimateTo (MonoTouch.UIKit.UIViewController aController, UIViewAnimationTransition transition) [0x00000] in <filename unknown>:0 
     at CatalystHD.IPad.RootViewController.Logout (Boolean timeout) [0x00000] in <filename unknown>:0 
     at CatalystHD.IPad.NotebookSelectionController.logoutButton_Clicked (System.Object sender, System.EventArgs e) [0x00000] in <filename unknown>:0 
     at MonoTouch.UIKit.UIBarButtonItem Callback.Call (MonoTouch.Foundation.NSObject sender) [0x00000] in <filename unknown>:0 
     at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x00000] in <filename unknown>:0 
     at MonoTouch.UIKit.UIApplication.Main (System.String[] args) [0x00000] in <filename unknown>:0 
     at CatalystHD.Application.Main (System.String[] args) [0x00000] in <filename unknown>:0 

संपादित VersionFile पथ इस तरह से पकड़ा जाता है:

public static string VersionFile { 
    get { 
     var path = Environment.GetFolderPath(Environment.SpecialFolder.Personal); 
     return Path.Combine(path, "version.dat"); 
    } 
} 
+0

'पथ। वर्जन फाइल' के साथ क्या पारित किया जा रहा है? –

+0

@ डैनियलए। व्हाइट संपादित करें –

+1

हमें आपके आवेदन के बारे में अधिक संदर्भ की आवश्यकता होगी, उदा। मैं किसी भी मुद्दे के बिना 10000x के लिए लूप में कोड चला सकता हूं, क्योंकि कुछ और अलग होना चाहिए। उस फ़ाइल को कब बनाया, अपडेट किया गया, हटा दिया गया है? किसी भी अलग धागे से? यह डिवाइस, सिम्युलेटर, दोनों पर होता है? ... और सभी संस्करण संख्याएं। – poupou

उत्तर

0

तो मुझे लगता है कि करने के लिए किया था, मुझे लगता है कि आप एक रेस स्थिति में चल रहा हो सकता है अंतर्निहित Flush() के कारण जो अंडर-द-हूडके निपटारे के दौरान होता हैउस ReadAllText कॉल में।

(चेतावनी: नहीं मोनो सूत्रों के सामने है, तो सही व्यवहार पुष्टि नहीं कर सकता)

यह संभव है कि है:

  • आप को बदल रहे हैं/फिर से खोलने/आदि। एक ही धागे में एक ही फ़ाइल पथ?
  • तुरंत या बाद में किसी अन्य धागे में उस पथ को हटा रहा है?
  • अन्यथा चेक किए गए पथ तक पहुंच खोना? (फाइल शेयर अनमाउंटिंग?)