using System; using System.Text; using System.IO; using System.Collections.Generic; namespace NaGet.Packages { /// /// 環境構築/移行を便利にするためのパッケージ名リストの表現クラス /// public class PackageCollectionFileData : System.Collections.ObjectModel.Collection { public PackageCollectionFileData() { } /// /// パッケージ名をリストに入れる /// /// パッケージ情報 public void loadPackages(IEnumerable pkgs) where T : Package { foreach (Package pkg in pkgs) { if (this.IndexOf(pkg.Name) < 0) { this.Add(pkg.Name); } } } /// /// パッケージ名をリストに入れる /// /// パッケージ情報 public void loadPackages(IEnumerator e) where T : Package { while(e.MoveNext()) { T pkg = e.Current; if (this.IndexOf(pkg.Name) < 0) { this.Add(pkg.Name); } } } /// /// このリストからパッケージのリストを得る /// /// パッケージのリスト public void generatePackages(PackageListsManager pkgMan, out IList pkgs, out IList invalidPkgNames) { pkgs = new List(); invalidPkgNames = new List(); foreach (string pkgName in this) { Package pkg = pkgMan.availablePkgList.GetPackageForName(pkgName); if (pkg != null) { if ((pkgMan.installedPkgList.GetPackageForName(pkgName) == null) && (pkgMan.systemInstalledPkgList.GetPackageForName(pkgName) == null)) { pkgs.Add(pkg); } else { // すでにインストールされている場合は何もしない } } else { invalidPkgNames.Add(pkgName); } } } #region ファイル入出力 /// /// リストをストリームに保存する /// /// 保存先 public void saveAs(StreamWriter stream) { foreach (string name in this) { stream.WriteLine("{0}", name); } } /// /// リストをファイルに保存する /// /// 保存先 public void saveAs(String filepath) { using (FileStream stream = new FileStream(filepath, FileMode.Create)) { using (StreamWriter sw = new StreamWriter(stream, Encoding.UTF8)) { saveAs(sw); } } } /// /// ストリームからリストを読み込む /// /// 読み取り元 public void load(StreamReader stream) { string line = null; while ((line = stream.ReadLine()) != null) { this.Add(line.Trim()); } } /// /// ファイルからリストを読み込む /// /// 読み取り元 public void load(string filepath) { using (FileStream fs = new FileStream(filepath, FileMode.Open)) { using (StreamReader sr = new StreamReader(fs, Encoding.UTF8)) { load(sr); } } } #endregion } }