2012-08-15 2 views
0

파일로 스트리밍하는 동안 문제가 발생합니다. 간단한 해결책이 있지만 문제가 있습니다. 제가하려고하는 것은 매우 간단합니다. 클래스의 내용을 가져 와서 XML로 직렬화하고 파일로 스트리밍합니다. 내가 사용하고있는 코드는 다음과 같다 :XmlSerializer 및/또는 StreamWriter가 해당 내용을 해제하지 않음

ObservableCollection<RackItemViewModel> rackVMs = ProjectTree.GetTreeData(); 

XmlSerializer serializer = new XmlSerializer(typeof(RackItem)); 
using (TextWriter tw = new StreamWriter(filename, false)) 
{ 
    foreach (RackItemViewModel VM in rackVMs) 
     serializer.Serialize(tw, VM.RackItem); 
} 

ProjectTree.GetTreeData()는 단지 직렬화 할 데이터를 반환한다. 프로그램을 실행하고 예상대로 데이터를 저장하면 데이터가 저장되고 Deserialize로 다시 읽을 수 있습니다. 내가 가지고있는 문제는 하나 이상의 저장을 수행 할 때입니다. 한 세트의 데이터를 하나의 파일에 저장하고 다른 세트를 다른 파일에 저장하면 첫 번째 파일은 정확하지만 두 번째 파일은 첫 번째 파일과 두 번째 파일의 연결입니다! 스트림 또는 XMLSerializer가 저장간에 내용을 해제하지 않는 것 같습니다. 스트림 대신 writefile을 사용해 보았는데 같은 문제가 발생했습니다. 또한 플러시를 시도하고 스트림을 닫았지만 효과가 없습니다. 말할 필요도없이 닫고 응용 프로그램을 저장하는 사이에 다시 시작하면 모두 정상적으로 작동합니다. 누구나 내가 뭘 잘못하고 있다고 말할 수 있습니까?

+0

아래에 게시 한 것처럼 다른 코드가 있습니까? 필자가 아는 한, 하나의 파일에 쓰고 다른 파일을 쓰려면 두 개의 별도의 StreamWriter를 사용해야하므로, 아직 보지 못한 코드가 더 있다고 가정합니다 ... – Charleh

답변

0

나는이 문제를 해결할 때이 스레드를 정리할 것이라고 생각했습니다. 데이터의 직렬화 또는 스트리밍과 관련이 없음이 밝혀졌습니다. 기록되는 데이터 버퍼가 쓰기간에 데이터를 완전히 릴리스하지 않았습니다. View Model 객체를 확인하고 있었지만 객체 (RackItem)는 객체를 따르지 않았습니다. 내 부분에 어리석은 오류. 제안 해줘서 고마워.

0

새 파일에 쓰기 전에 먼저 스트림 플러시를 시도하십시오. tw.Flush().

+0

슬프게도 tw.flush를 시도했습니다. 그리고 도움이되지 않는 tw.close. 위의 코드는 File, Save 메뉴를 통해 호출되는 메서드 (PerformSave)에 포함되어 있습니다. 사용자가 한 번 호출하면 OK를 실행 한 다음 다른 데이터로 두 번째로 호출합니다. 여기서 문제가 발생합니다. – Marcus

관련 문제