2014-10-28 103 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(); 
    } 
} 
}