2014-10-28 102 views
1

我想插入二進制文件中的數據。數據是50 struct.i想要將二進制文件中的軟音樂文件的特徵保存爲數據庫,我可以使用它。從c#中的二進制文件讀取多個結構#

我爲每首歌建立了一個結構,並將其插入到文件中。 結構包含:

public struct s { 
    public byte class_no; 
    public int sample_no; 
    public byte [] template; 
} 

其中模板尺寸4410 我的文件現在包含50結構的1-d陣列,我想使用二進制文件中讀取它,使所有的結構的結構的陣列中的文件

+0

什麼樣的數據庫?或者你在使用什麼數據庫產品? – RadioSpace 2014-10-28 05:26:27

+0

我想用文本文件來保存文本文件中的軟音樂的功能,好的,我保存了功能,但我想從file.in中讀取它們的其他含義..我想從文件中讀取結構並將其保存在2 -d數組,每行包含一個從file.my讀取的結構。我的問題是如何從文件中讀取多個結構? – user3024081 2014-10-28 08:25:15

+0

你用什麼代碼將這個結構體轉換成文件? – RadioSpace 2014-10-29 12:44:48

回答

0

我會回答從文件讀取多個結構。

這個例子定義了一個保存數據的結構,你需要用它來做你自己的事情。

這一切都不是專爲您的特定需求,但作爲一般如何保存和讀回結構的列表定義你的自我

完整的代碼,你可以複製並粘貼到一個新的控制檯應用程序項目:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

using System.IO; 

//where the magic lives 
using System.Runtime.Serialization.Formatters.Binary; 

namespace savecon 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     Random rand = new Random(); 

     byte[] data = new byte[20]; 

     rand.NextBytes(data); 

     DataObj a = new DataObj(data); 
     DataObj b = new DataObj(data); 

     DataCollection dc_old = new DataCollection(); 
     dc_old.Add(a); 
     dc_old.Add(b); 

     DataCollection.ToFile("D:\\data.my",dc_old);//I use D: drive yours will be different 

     DataCollection dc_new = DataCollection.FromFile("D:\\data.my"); 



    } 
} 

[Serializable]//the magic 
struct DataObj 
{ 
    byte[] data; 
    public DataObj(byte[] d) 
    { 
     data = d; 
    } 
} 


[Serializable]//more magic 
class DataCollection : IEnumerable<DataObj> 
{ 
    List<DataObj> dataobjects;//list<> is Attributed with Serializable as well 
    public DataCollection() 
    { 
     dataobjects = new List<DataObj>(); 
    } 


    public static DataCollection FromFile(string path) 
    { 
     DataCollection dcol; 

     using (FileStream FS = File.OpenRead(path)) 
     { 
      dcol = (DataCollection)new BinaryFormatter().Deserialize(FS); // magic happening 
     } 

     return dcol; 
    } 


    public static void ToFile(string path,DataCollection DC) 
    { 
     using (FileStream FS = File.Open(path, FileMode.Create, FileAccess.ReadWrite)) 
     { 
      new BinaryFormatter().Serialize(FS, DC); 
     } 
    } 


    public void Add(DataObj dobj) 
    { 
     dataobjects.Add(dobj); 
    } 




    //note that Ienumerable does not matter for serializing (saving the data) 

    public IEnumerator<DataObj> GetEnumerator() 
    { 
     return dataobjects.AsEnumerable().GetEnumerator(); 
    } 

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() 
    { 
     return dataobjects.GetEnumerator(); 
    } 
} 
}