2012-10-21 67 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串行器/解串器。下面是一個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 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

您可以添加[Serializable]這個並使用二進制序列化將您的數據序列化爲字節數組。比你可以將它保存到文件。

public static string Serialize(object o) 
{ 
    using (var s = new FileStream()) 
    { 
     _binaryFormatter.Serialize(s, o); 
    } 
} 
相關問題