2011-07-02 18 views
1

私はC#でmp3プレーヤーを書いていますが、私は迅速な検索のためにメタデータを保存する方法が不思議です。C#でmp3プレーヤーを書く、辞書や配列を使ってメタデータを作る?

  • ファイルの場所
  • ファイル名
  • アーティスト
  • アルバム
  • トラックタイトル
  • アルバムアートワーク

方法:ここで私は、個々のファイルの格納に必要なデータですデータを保存する必要がありますか?配列の辞書?辞書の辞書?私はリストボックスに個々のエントリを設定したいので、もし私がアーティストに言うボタンを持っていれば、アーティスト情報をすぐに取得し、配列に入れてリストボックスを作成します。

答えて

2

generic listについてはどうですか?

// define song object. 
public class Song 
{ 
    public string FileLocation { get; set; } 
    public string FileName { get; set; } 
    public string Artist { get; set; } 
    public string Album { get; set; } 
    public string TrackTitle { get; set; } 
    public string AlbumArtwork { get; set; } 
} 

// create list of songs. 
List<Song> songs = new List<Song>(); 

// add new song to list. 
songs.Add(new Song { 
     FileLocation = "/filepath/sade.mp3", 
     FileName = "Sade", 
     Artist = "Sade", 
     Album = "Sade", 
     TrackTitle = "Smooth Operator", 
     AlbumArtwork "TBD" 
}); 

// access first song in list. 
Song song = songs[0]; 

// access property of song. 
string trackTitle = song.TrackTitle; 

もちろんあなたにも曲の性質複雑なオブジェクトを作ることによってobject-oriented design一層にこれを打破することができます。たとえば:

public class Album 
{ 
    public string Name 
    public DateTime ReleaseDate 
    public string Artwork { get; set; } 
} 

public class Artist 
{ 
    public string Name 
    public List<Album> Albums 
} 

public class Song 
{ 
    public string FileLocation { get; set; } 
    public string FileName { get; set; } 
    public Artist Artist { get; set; } 
    public string TrackTitle { get; set; } 
} 

そしては、例えば、次のようにアルバムのプロパティにアクセス:

string firstAlbumName = song.Artist.Albums[0].Name; 
+0

メタデータ、またはリストにアクセスするために高速になり、SQLのでしょうか?私はアクセスするために約<200k曲を持っています。 "リスト"を使用する方が簡単な解決策になると思われますが、SQLは最も効率的です。私はSQLについてよく知らないし、座って自分自身にSQLを教えなければならないよりも、上記のクラスを奨励する方が速いだろう。決定、決定....... – darthwillard

+0

まあ、おそらく両方を使用する必要があります。すべてのデータをデータベースに保存します。次に、(いくつかの検索条件に基づいて)適切なデータを取得し、Songオブジェクトにデータを取り込み、そのデータをリストします。その後、これらのオブジェクトを使って作業し、フロントエンドに表示することができます。 – Kon

+0

私は、ディスク上の長期的なものではなく、短期間でメモリにあなたの曲を保存する方法を尋ねていると仮定したので、ソリューションのオブジェクト/モデル部分だけをカバーし、データベース部分はカバーしませんでした。 – Kon

1

ストレージに影響を与えるだろうが何があるように思えません、私はList<Track>または類似した、とのすなわち「クラスのリストを」、言うん

public class Track { 
    public string Path {get;set;} 
    ... 
    public string Title {get;set;} 
    public string ArtworkPath {get;set;} 
} 

量が高い場合は、あなたをメモリ内の記憶域ではなくデータベースを調べることができます。たとえば、SQL Server(ExpressまたはCompact)は両方とも無料です。これにより、多大な労力と事前構築された永続性を持たずに、より特殊化されたインデックス作成が可能になります。

1

あなたのデータを保存する最も良い方法はデータベースにありますが、そこから自由に選択できる小さなデータベースがあります。たとえば、sqliteは素晴らしいです。 sqlを使用して、データの高速アクセス(検索、グループ化など)を行うことができます。

関連する問題