2012-04-19 118 views
4

是否可以將變量從C#保存到磁盤,以便稍後在項目的另一個實例中使用它?將可變數據保存到磁盤

例如,我有3場像在下面的例子中一個結構:

struct MyStruct 
{ 
    byte[] ByteData; 
    int MyInt; 
    double MyDouble; 
}; 

我有這個結構的一個實例,讓我們說MyStruct S,我將值分配給我的所有領域。 完成這一步之後,我想以某種方式將此變量保存在磁盤中,以便稍後在我的程序中使用這些存儲的值。

我知道,我可以將這些值複製到.txt文件中,但我想將變量保存在我的磁盤上,這樣我可以在項目的下一次運行時直接將其加載到內存中。

是否有可能以某種方式將它保存在磁盤上,以便我可以將它加載到我的程序中,因爲它是?

+6

看看序列化。 – CodeCaster 2012-04-19 14:13:44

+1

我只是將它序列化爲Xml。然後在需要時將其反序列化。 – BlueVoodoo 2012-04-19 14:14:47

+0

實際上,你*要*想以文本格式保存它。因爲它更容易進行調試。並且性能不應該真的是至關重要的...... – 2012-04-19 14:16:54

回答

6
public void SerializeObject<T>(string filename, T obj) 
    { 
     Stream stream = File.Open(filename, FileMode.Create); 
     BinaryFormatter binaryFormatter = new BinaryFormatter(); 
     binaryFormatter.Serialize(stream, obj); 
     stream.Close(); 
    } 

    public T DeSerializeObject<T> (string filename) 
    { 
     T objectToBeDeSerialized; 
     Stream stream = File.Open(filename, FileMode.Open); 
     BinaryFormatter binaryFormatter = new BinaryFormatter(); 
     objectToBeDeSerialized= (T)binaryFormatter.Deserialize(stream); 
     stream.Close(); 
     return objectToBeDeSerialized; 
    } 

[Serializable] 
struct MyStruct 
{ 
    byte[] ByteData; 
    int MyInt; 
    double MyDouble; 
} 

不要忘記將您的對象標記爲可序列化。

+0

@Archer實際上可以使用代碼序列化結構,爲什麼你認爲這是不可能的? – daryal 2012-04-19 14:23:31

+0

因此,我創建了一個繼承Serializable的類,並創建了這兩個函數來將文件保存到磁盤並從磁盤加載它? – Simon 2012-04-19 14:32:30

+0

@Simon只需將[Serializable]屬性添加到要序列化的類。 – daryal 2012-04-19 14:35:41