0

Я читаю данные из IsolStorage, но не могу редактировать их в ScheduledTask. Как я могу его отредактировать?IsolatedStorage Edit в Windows Phone 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 (Exception)' на 'catch (Exception ex)' и размещение точки останова на одну строку ниже. Таким образом, даже если вы планируете игнорировать исключения, когда один происходит во время отладки, приложение остановится и позволит вам его проверить. –

ответ

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 - что означает «открыть существующий файл». В первый раз, когда вы сделаете это, файл не будет существовать, и open завершится с ошибкой.

Вы должны либо использовать FileMode.OpenOrCreate, что самоочевидно, либо FileMode.Append, который откроет файл, если он существует, и ищет конец файла, или создайте новый файл, если это не так.

Если вы хотите выбросить любой уже существующий файл (который является то, что ваш удалить, а затем создать будет делать), а затем просто использовать FileMode.Create

Смежные вопросы