0

我正在从IsolatedStorage中读取数据,但无法在ScheduledTask中对其进行编辑。我如何编辑它?Windows Phone中的IsolatedStorage编辑ScheduledTask

private void StartToastTask(ScheduledTask task) 
    { 
     long rank = 0, difference = 0; 
     string text = "", nickname = ""; 
     PishtiWCF.PishtiWCFServiceClient ws = ServiceClass.GetPishtiWCFSvc(); 
     ws.GetUsersRankCompleted += (src, e) => 
     { 
      try 
      { 
       if (e.Error == null) 
       { 
        difference = rank - e.Result.GeneralRank; 
        if (!String.IsNullOrEmpty(nickname)) 
        { 
         if (difference < 0) 
          text = string.Format("{0}, {1} kişi seni geçti!", nickname, difference.ToString(), e.Result.GeneralRank); 
         else if (difference > 0) 
          text = string.Format("{0}, {1} kişiyi daha geçtin!", nickname, Math.Abs(difference).ToString(), e.Result.GeneralRank); 
         else if (e.Result.GeneralRank != 1) 
          text = string.Format("{0}, sıralamadaki yerin değişmedi!", nickname, e.Result.GeneralRank); 
         else 
          text = string.Format("{0}, en büyük sensin, böyle devam!", nickname); 
        } 
        else 
         return; 
        Mutex mut; 
        if (!Mutex.TryOpenExisting("IsoStorageMutex", out mut)) 
         mut = new Mutex(false, "IsoStorageMutex"); 
        mut.WaitOne(); 
        using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication()) 
        { 
         using (IsolatedStorageFileStream stream = file.OpenFile("UserRanks", FileMode.Open, FileAccess.Write)) 
         { 
          StreamWriter writer = new StreamWriter(stream); 
          writer.Write(string.Format("{0},{1}", nickname, e.Result.GeneralRank)); 
          writer.Close(); 
          stream.Close(); 
         } 
        } 
        mut.ReleaseMutex(); 

        ShellToast toast = new ShellToast(); 
        toast.Title = "Pishti"; 
        toast.Content = text; 
        toast.Show(); 
       } 
       FinishTask(task); 
      } 
      catch (Exception) 
      { 

      } 
     }; 
     try 
     { 
      Mutex mut; 
      if (!Mutex.TryOpenExisting("IsoStorageMutex", out mut)) 
       mut = new Mutex(false, "IsoStorageMutex"); 
      mut.WaitOne(); 
      using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication()) 
      { 
       using (IsolatedStorageFileStream stream = file.OpenFile("UserRanks", FileMode.Open, FileAccess.Read)) 
       { 
        using (StreamReader reader = new StreamReader(stream)) 
        { 
         string temp = reader.ReadToEnd(); 
         if (temp.Split(',').Count() > 1) 
         { 
          nickname = temp.Split(',')[0]; 
          rank = long.Parse(temp.Split(',')[1]); 
          ws.GetUsersRankAsync(nickname); 
         } 
         reader.Close(); 
        } 
        stream.Close(); 
       } 
      } 
      mut.ReleaseMutex(); 
     } 
     catch (Exception) 
     { 
     } 

    } 

我正在从UserRanks文件级别,例如1200,但是当我和数据从WCF,编辑它以1000并希望将其写入IsolatedStorage,它不会崩溃的应用程序,但它失败。

你知道为什么吗?

谢谢。

+0

是你的catch块空的一个原因?我看到你解决了你的问题,但你表示它不会崩溃但失败。如果catch块为空,则将指示将指示从何处开始故障排除的异常被吞下。一个好的开始就是将catch(Exception)改为catch(Exception ex),并将一个断点放在下一行。这样,即使您计划忽略异常,但在调试过程中发生异常时,应用程序将停止并允许您检查它。 – 2014-11-07 00:08:47

回答

1

我已经用删除文件修复了它。

    Mutex mut; 
        if (!Mutex.TryOpenExisting("IsoStorageMutex", out mut)) 
         mut = new Mutex(false, "IsoStorageMutex"); 
        mut.WaitOne(); 
        using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication()) 
        { 
         if (file.FileExists("UserRanks")) 
          file.DeleteFile("UserRanks"); 
         using (IsolatedStorageFileStream stream = file.OpenFile("UserRanks", FileMode.OpenOrCreate, FileAccess.Write)) 
         { 
          StreamWriter writer = new StreamWriter(stream); 
          writer.Write(string.Format("{0},{1}", nickname, e.Result.GeneralRank)); 
          writer.Close(); 
          stream.Close(); 
         } 

        } 
        mut.ReleaseMutex(); 
0

你似乎写入到文件第一,这是有道理的,但是当你做,你使用文件访问模式 - FileMode.Open - 这意味着“打开现有文件”。第一次你做这个文件将不存在,并打开将失败。

您应该使用FileMode.OpenOrCreate(自解释)或FileMode.Append(如果该文件存在并打开文件结尾)或创建一个新文件(如果没有)。

如果你想扔掉任何预先存在的文件(这是你的删除,然后建立将做),那么只需使用FileMode.Create

相关问题