1

내 Windows phone 앱에 목록 상자가 있고 datatemplate에 question, answer, date 및 emailid를 나타내는 4 개의 텍스트 상자 컨트롤이 있습니다.isolatedstoragefile을 사용하여 파일에 여러 세트의 데이터를 쓰는 방법

사용자가이 데이터를 저장할 때 해당 데이터를 로컬 저장소에 저장하여 나중에 앱에서 동일한 데이터를 표시하기 위해 읽을 수 있도록하고 싶습니다. 따라서 각 행에 위의 데이터 (질문, 답변, 날짜 및 전자 메일)가 포함 된 각 데이터 집합을 사용하여 isolatedstoragefile을 사용하여 파일에 여러 데이터 집합을 작성하는 방법.

각 레코드를 읽는 동안 각 열 (질문, 답변, 날짜 및 전자 메일 주소)을 어떻게 다르게 읽습니까? 필자는 각 줄을 읽는 동안 글을 쓰고 나누는 동안 연결할 수 있음을 압니다. 그러나 내가 원하는 방식을 읽기 위해 IsolatedstorageFile API에 제공된 방법이 있는지 알고 싶습니다.

답변

0

"정상"파일을 사용하는 것과 같습니다.

나는 바이너리 또는 XML 직렬화의 큰 팬이 아니므로 4 개의 필드를 세미콜론으로 구분하고 각 항목 (질문; 응답; 날짜; emailid)을 새 행에 써야합니다. 결과 문자열을 파일에 저장하십시오.

그러면 읽을 때 전체 파일을 문자열로 읽고 줄 바꿈으로 분할하면 모든 항목을 가져옵니다. 각 행 (항목)에 대해 세미콜론을 사용하여 분할하고 4 개의 필드를 가져 오면 필요한 유형으로 캐스팅 할 수 있습니다.

0

http://whydoidoit.com/에서 Silverlight 시리얼 라이저를 사용하고 개체를 격리 된 저장소로 직렬화합니다. 그것의 진짜로 좋은 serializer - 그것의 빠르고 파일은 작습니다. 저장 및 검색하는 코드는

public static void SaveFile(string filename, object serializableObject, Type type) 
    { 
     using (IsolatedStorageFile userStore = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      if (userStore.FileExists(filename)) 
      { 
       userStore.DeleteFile(filename); 
      } 

      using (IsolatedStorageFileStream stream = userStore.CreateFile(filename)) 
      { 
       SilverlightSerializer.Serialize(serializableObject, stream); 
      } 
     } 
    } 

    public static object LoadSerializedObjectFromFile(string filename, Type type) 
    { 
     using (IsolatedStorageFile userStore = 
      IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      if (userStore.FileExists(filename)) 
      { 
       using (IsolatedStorageFileStream stream = userStore.OpenFile(filename, FileMode.Open)) 
       { 
        return SilverlightSerializer.Deserialize(stream); 
       } 
      } 
     } 
     return null; 
    } 

입니다. 일반적으로 저장소 (패턴)에 개별 파일을 래핑합니다. 예를 들어 내 Good Deal 앱에서 DealRepository가 있습니다.

private static IDeal LoadRecentDeal() 
    { 
     IDeal savedDeals = IsolatedStorageHelper.LoadSerializedObjectFromFile(RecentDealFileName, typeof(Deal)) as Deal; 
     if (savedDeals != null) 
     { 
      return savedDeals; 
     } 
     else 
     { 
      return Deal.CreateNewDeal(RecentDealFileName); 
     } 
    } 

내부는 방법이 같은 것입니다 저장 :

public void Save(IDeal deal) 
    { 
     deal.LastModifiedDate = DateTime.Now; 

     // 
     string fileName; 
     if (deal.Name == RecentDealFileName) 
     { 
      fileName = RecentDealFileName; 
     } 
     else 
     { 
      fileName = SavedDirectoryName + Path.DirectorySeparatorChar + deal.ID.ToString(); 
     } 

     IsolatedStorageHelper.SaveFile(fileName, deal, typeof(IDeal));  
    } 

그리고 수행하는 데 사용되는 IsolatedStorageHelper 및 저장소에 여러 가지 다른 방법이 있습니다 여기에 표시된 것처럼 그 저장소에서 나는 정적 부하 방법이 같은 것들이 여러 파일에 목록을 저장하고 그들을 반환 ... 등 모든 귀하의 요구에 따라 달라집니다 -하지만 Silverlight Serializer를 체크 아웃하는 것이 좋습니다, 그것은 매우 간단합니다.