2013-09-16 5 views
1

관찰 가능한 컬렉션을 txt 파일에 쓰는 가장 좋은 방법은 무엇입니까? 현재 다음을 가지고 있습니다.관찰 가능한 컬렉션을 txt 파일에 쓰는 방법은 무엇입니까?

public ObservableCollection<Account> SavedActionList = new ObservableCollection<Account>(); 
using (System.IO.StreamWriter file = new System.IO.StreamWriter("SavedAccounts.txt")) 
     { 
      foreach (Account item in SavedActionList) 
      { 
       file.WriteLine(item.ToString()); //doesn't work 
      } 
      file.Close(); 
     } 

왜 파일에 쓰지 않을지 잘 모르겠습니다. 어떤 아이디어?

+0

출력이 생성되어야합니다. "작동하지 않는다"고 말하면 예상과 다른/잘못된 것입니까? –

+0

간단히 작동하지 않습니다. 나는 정말로 왜 혼란 스럽습니다. 그래서 나는 질문을 게시했습니다. 나는 그것을 file.Close() 전에 file.WriteLine ("Hello")를 삽입하여 테스트하고 프로그램을 실행하고 파일을 모두 확인하면 "Hello"가됩니다. – user2453973

+1

실제로 항목이 있는지 너의 소장품? 단계별로 진행하면 파일에 단계별로 들어갈 수 있습니까? 컬렉션에 아이템이 없다면 건너 뛸 것입니다 ... –

답변

3

당신은 그냥 쉽게 작성할 수 있습니다

File.WriteAllLines("SavedAccounts.txt", SavedActionList.Select(item => item.ToString())); 

그러나, 이것은 당신이 파일에 기록하고자하는 정보를 제공하기 위해 ToString를 대체하기 위해 Account 클래스를 필요로 할 것이다. 당신이 오버라이드 (override) ToString이없는 경우, 나는이 방법을 권장합니다

이 처리 :이

string AccountToLine(Account account) 
{ 
    // Convert account into a 1 line string, and return 
} 

를, 당신은 다음 작성할 수있는

File.WriteAllLines("SavedAccounts.txt", SavedActionList.Select(AccountToLine)); 

편집 의견에 대한 답변 :

간단히 말해서 작동하지 않습니다. 나는 정말로 왜 혼란 스럽습니다. 그래서 나는 질문을 게시했습니다. 나는 file.Close() 전에 file.WriteLine ("Hello")를 삽입하여 테스트하고 프로그램을 실행하고 "Hello"파일을 모두 확인하면

실제로 들립니다. 아이템을 추가하지 않고 콜렉션을 쓰는 것처럼. 컬렉션이 비어 있으면 위의 코드 (및 귀하의 것)는 출력 할 빈 파일을 만듭니다. Account 인스턴스를 쓸 수 없습니다.

+0

나는 이것을 시도 할 것이다! – user2453973

+0

감사합니다. 컬렉션에 항목이 성공적으로 추가되었으며 toString()을 오버로드 한 후 원래 코드로 작업했습니다. 감사. – user2453973

관련 문제