2010-11-03 26 views
5

Tôi đang tạo ứng dụng Windows Phone 7 trong Silverlight. Tôi đang gặp khó khăn với IsolatedStorage..NET: IsolatedStorageException

 IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication(); 
     if (!storage.FileExists(STORIES_FILE)) 
     { 
      storage.CreateFile(STORIES_FILE); 
     } 

     string contents; 

     // fails here 
     using (IsolatedStorageFileStream stream = storage.OpenFile(STORIES_FILE, FileMode.Open)) 
     { 
      using (StreamReader reader = new StreamReader(stream)) 
      { 
       contents = reader.ReadToEnd(); 
      } 
     } 

Trường hợp ngoại lệ là:

"Operation not permitted on IsolatedStorageFileStream." 
System.Exception {System.IO.IsolatedStorage.IsolatedStorageException} 

Những gì tôi có thể làm sai ở đây? MSDN says rằng ngoại lệ này được ném khi bộ nhớ bị cô lập bị xóa hoặc vô hiệu hóa. Điều đó có thể xảy ra không? Tôi đang gặp vấn đề này trên trình mô phỏng.

Cập nhật: Điều này dường như chỉ xảy ra khi lần đầu tiên tôi chạy ứng dụng trên trình mô phỏng. Sau khi ứng dụng bị treo, tôi chạy nó trên trình giả lập một lần nữa, và vấn đề này không xảy ra.

Cập nhật 2: Sử dụng FileMode.OpenOrCreate thay vì FileMode.Open dường như đã giải quyết được sự cố.

+0

Tôi đang sử dụng FileMode.OpenOrCreate, nhưng vẫn nhận được cùng một vấn đề. Lần đầu tiên nó thành công, nhưng giây lại không thành công. – swinefeaster

Trả lời

3

Lần đầu tiên bạn chạy ứng dụng của bạn, các tập tin là không có, hãy thử này để thay thế:

using (IsolatedStorageFileStream stream = storage.OpenFile(STORIES_FILE, FileMode.OpenOrCreate)) 
     { 
      using (StreamReader reader = new StreamReader(stream)) 
      { 
       contents = reader.ReadToEnd(); 
      } 
     } 
+0

Nhưng tôi đang gọi 'storage.CreateFile (FILE_NAME)'. Điều đó không làm gì cả? –

+0

Vâng, nhưng trong đoạn mã đó, bạn không sử dụng luồng được trả về bởi lệnh gọi storage.CreateFile. Cho đến khi cá thể đó được xóa hoặc đóng lại, tệp sẽ vẫn không tồn tại. Với sự thay đổi trong tham số FileMode, bạn có thể chỉ cần loại bỏ các cuộc gọi đến CreateFile để làm sạch nó lên. –

+0

Vì vậy, tôi cần một cái gì đó như 'storage.CreateFile (" Foo "). Flush()'? –