2012-10-21 5 views
1

다음과 같이 간단한 구조로되어 있습니다.파일에 사용자 지정 구조의 배열을 저장하려면 어떻게해야합니까?

public struct Structure 
{ 
    public byte Style; 
    public string Value1; 
    public string Value2; 
    public int Value3; 
    public bool Active; 
} 

가변 크기를 파일로 사용하여이 구조체의 배열을 저장하고 싶습니다. 이 파일은 프로그램 시작시 자동으로로드되며 프로그램이 사용 중일 때 업데이트됩니다. 내가 프로그램 내에서 그것을 사용하는 방법을 알아낼 수 있습니다, 나는 단지 그것을 저장하는 데 사용해야하는 방법을 잘 모르겠습니다. 각 값에 대해 접두사가 붙은 바이트 길이를 가진 바이너리 라이저를 사용해야한다고 생각하니? 그것이 맞다면, Structure [X] 배열을 저장하고로드하는 방법의 예가 엄청난 도움이 될 것입니다. 미적 이유로, 사용자 정의 확장자 (예 : Array.ext)가있는 파일에 보관하고 싶습니다. 데이터를 시작과 실행 사이에 저장하는 다른 솔루션에 반대하지는 않습니다.

+1

SQLite와 같은 일부 파일 기반 데이터베이스를 사용하지 않는 이유는 무엇입니까? –

답변

1

몇 가지 옵션이 있습니다. 파일을 사람이 읽을 수있는 형식으로 저장해야하는 경우 XML 또는 JSON Serializer/Deserializer를 사용할 수 있습니다. 당신은 당신이에 [Serializable]을 추가 할 수 있습니다

public static void Serialize(Structure[] input) 
{ 
    var stream = new StreamWriter(@"C:\Array.ext"); 
    var bformatter = new BinaryFormatter();  
    bformatter.Serialize(stream, input); 
    stream.Close(); 
} 

public static Structure[] Deserialize() 
{ 
    var stream = new StreamReader(@"C:\array.ext"); 
    var bformatter = new BinaryFormatter(); 
    var obj = bformatter.Deserialize(stream); 
    stream.Close(); 
    return (Structure[])object; 
} 

당신은 [Serializable]뿐만 아니라

[Serializable] 
public class Structure { //etc 
+0

완벽 하 고, 대단히 감사합니다! 미안이 너무 기본적인 질문이 여기에, 한 시간 동안 구글 주위를 찾고 있었다면 바이트 데이터로 저장하고 다음 그것을 되돌릴 수있는 긴 함수를 작성해야 할 줄 알았는데. –

+0

바이너리 시리얼 라이저 (사람이 읽을 수없는)로 업데이트했습니다. – Dharun

2

로 클래스를 표시해야 바이너리 시리얼 라이저를 사용하려면 다음은 XML 예제

public static void Serialize(Structure[] input) 
{ 
    var serializer = new XmlSerializer(input.GetType()); 
    var sw= new StreamWriter(@"C:\array.ext"); 
    serializer.Serialize(sw, input); 
    sw.Close(); 
}  

public static Structure[] Deserialize() 
{ 
    var stream = new StreamReader(@"C:\array.ext"); 
    var ser = new XmlSerializer(typeof(Structure[])); 
    object obj = ser.Deserialize(stream); 
    stream.Close(); 
    return (Structure[])obj; 
} 

입니다 바이트 배열로 데이터를 직렬화하기 위해 이진 직렬화를 사용하십시오. 그것을 파일로 저장할 수 있습니다.

public static string Serialize(object o) 
{ 
    using (var s = new FileStream()) 
    { 
     _binaryFormatter.Serialize(s, o); 
    } 
} 
관련 문제