OSDN Git Service

AppliStation-GUI,ソフトコレクションファイルのエクスポートにファイルの種類を選べる機能を追加
[applistation/AppliStation.git] / na-get-lib / NaGet / Utils.cs
index 55fafd8..994e46f 100644 (file)
@@ -85,7 +85,7 @@ namespace NaGet
                /// </summary>\r
                /// <param name="enus">元となる複数のイテレータ</param>\r
                /// <returns>結合されたイテレータ</returns>\r
-               public static List<T> MeargeList<T>(params IEnumerable<T>[] enus)\r
+               public static List<T> MergeList<T>(params IEnumerable<T>[] enus)\r
                {\r
                        List<T> list = new List<T>();\r
                        \r
@@ -104,11 +104,17 @@ namespace NaGet
                /// <param name="enu">元となるイテレータ</param>\r
                /// <returns>変換された配列</returns>\r
                public static T[] IEnumerable2Array<T>(IEnumerable<T> enu) {\r
-                       if (enu is T[]) {\r
-                               return (T[]) enu;\r
-                       } else {\r
-                               return ((enu is List<T>)? ((List<T>)enu):new List<T>(enu)).ToArray();\r
+                       T[] retval = enu as T[];\r
+                       \r
+                       if (retval == null) {\r
+                               List<T> list = enu as List<T>;\r
+                               if (list == null) {\r
+                                       list = new List<T>(enu);\r
+                               }\r
+                               retval = list.ToArray();\r
                        }\r
+                       \r
+                       return retval;\r
                }\r
                \r
                /// <summary>\r
@@ -133,9 +139,9 @@ namespace NaGet
                #region ファイル情報関連ユーテイリティ関数\r
                \r
                /// <summary>\r
-               /// パス変数に指定のフォルダを追加する\r
+               /// ã\83\91ã\82¹å¤\89æ\95°ã\81«æ\8c\87å®\9aã\81®ã\83\95ã\82©ã\83«ã\83\80ã\83¼ã\82\92追å\8a ã\81\99ã\82\8b\r
                /// </summary>\r
-               /// <param name="dir">追加するフォルダ</param>\r
+               /// <param name="dir">追加するフォルダ</param>\r
                public static void AddDirectoryToPath(string dir)\r
                {\r
                        string path = Environment.GetEnvironmentVariable("PATH");\r
@@ -173,9 +179,9 @@ namespace NaGet
                /// URLからそのファイル名を生成する\r
                /// </summary>\r
                /// <param name="url">対象のurl</param>\r
-               public static string Url2filename(string url)\r
+               public static string Url2filename(Uri url)\r
                {\r
-                       string filename = Path.GetFileName(System.Web.HttpUtility.UrlDecode(url, Encoding.UTF8));\r
+                       string filename = Path.GetFileName(System.Web.HttpUtility.UrlDecode(url.ToString(), Encoding.UTF8));\r
                        \r
                        int pos;\r
                        if ((pos = filename.IndexOfAny(Path.GetInvalidFileNameChars())) >= 0) {\r
@@ -191,9 +197,9 @@ namespace NaGet
                }\r
                \r
                /// <summary>\r
-               /// 再帰的にファイルの属性を指定します。強制的にフォルダの再帰削除の前に読み込み専用属性を消すのに使います。\r
+               /// å\86\8d帰ç\9a\84ã\81«ã\83\95ã\82¡ã\82¤ã\83«ã\81®å±\9eæ\80§ã\82\92æ\8c\87å®\9aã\81\97ã\81¾ã\81\99ã\80\82å¼·å\88¶ç\9a\84ã\81«ã\83\95ã\82©ã\83«ã\83\80ã\83¼ã\81®å\86\8d帰å\89\8aé\99¤ã\81®å\89\8dã\81«èª­ã\81¿è¾¼ã\81¿å°\82ç\94¨å±\9eæ\80§ã\82\92æ¶\88ã\81\99ã\81®ã\81«ä½¿ã\81\84ã\81¾ã\81\99ã\80\82\r
                /// </summary>\r
-               /// <param name="path">設定するフォルダ</param>\r
+               /// <param name="path">設定するフォルダ</param>\r
                /// <param name="attr">設定する属性値</param>\r
                public static void SetAttributeRecursive(string path, FileAttributes attr)\r
                {\r
@@ -205,7 +211,7 @@ namespace NaGet
                                File.SetAttributes(file, attr);\r
                        }\r
                        \r
-                       // 子フォルダを再帰的に属性変更\r
+                       // å­\90ã\83\95ã\82©ã\83«ã\83\80ã\83¼ã\82\92å\86\8d帰ç\9a\84ã\81«å±\9eæ\80§å¤\89æ\9b´\r
                        foreach (string file in Directory.GetDirectories(path)) {\r
                                SetAttributeRecursive(file, attr);\r
                        }\r
@@ -214,7 +220,7 @@ namespace NaGet
                /// <summary>\r
                /// 再帰的にファイルのアクセス権限(ユーザ権限など)を設定します\r
                /// </summary>\r
-               /// <param name="path">設定するフォルダ</param>\r
+               /// <param name="path">設定するフォルダ</param>\r
                /// <param name="filesec">変更先権限</param>\r
                public static void SetAccessControlRecursive(string path, FileSecurity filesec)\r
                {\r
@@ -226,17 +232,17 @@ namespace NaGet
                                File.SetAccessControl(file, filesec);\r
                        }\r
                        \r
-                       // 子フォルダを再帰的に権限変更\r
+                       // å­\90ã\83\95ã\82©ã\83«ã\83\80ã\83¼ã\82\92å\86\8d帰ç\9a\84ã\81«æ¨©é\99\90å¤\89æ\9b´\r
                        foreach (string file in Directory.GetDirectories(path)) {\r
                                SetAccessControlRecursive(file, filesec);\r
                        }\r
                }\r
                \r
                /// <summary>\r
-               /// ファイルまたはフォルダの容量を算出して返す\r
+               /// ã\83\95ã\82¡ã\82¤ã\83«ã\81¾ã\81\9fã\81¯ã\83\95ã\82©ã\83«ã\83\80ã\83¼ã\81®å®¹é\87\8fã\82\92ç®\97å\87ºã\81\97ã\81¦è¿\94ã\81\99\r
                /// </summary>\r
                /// <param name="path">\r
-               /// 対象ファイル及びフォルダのパス\r
+               /// å¯¾è±¡ã\83\95ã\82¡ã\82¤ã\83«å\8f\8aã\81³ã\83\95ã\82©ã\83«ã\83\80ã\83¼ã\81®ã\83\91ã\82¹\r
                /// </param>\r
                /// <returns>\r
                /// 計算された容量(バイト単位)\r
@@ -248,10 +254,10 @@ namespace NaGet
                }\r
                \r
                /// <summary>\r
-               /// フォルダの容量を算出して返す\r
+               /// ã\83\95ã\82©ã\83«ã\83\80ã\83¼ã\81®å®¹é\87\8fã\82\92ç®\97å\87ºã\81\97ã\81¦è¿\94ã\81\99\r
                /// </summary>\r
                /// <param name="dirInfo">\r
-               /// 対象フォルダ\r
+               /// 対象フォルダ\r
                /// </param>\r
                /// <returns>\r
                /// 計算された容量(バイト単位)\r
@@ -309,14 +315,14 @@ namespace NaGet
                /// パスをパス区切り文字列ごとに分割した配列を返す\r
                /// </summary>\r
                /// <param name="path">パス文字列。相対・絶対は区別しない</param>\r
-               /// <returns>フォルダ名ごとに分けられた文字列配列</returns>\r
+               /// <returns>フォルダ名ごとに分けられた文字列配列</returns>\r
                private static string[] splitPath(string path)\r
                {\r
                        return path.Split(new char[]{Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar});\r
                }\r
                \r
                /// <summary>\r
-               /// パスがフォルダのとき、最後がパスセパレータで終了するようにする。\r
+               /// ã\83\91ã\82¹ã\81\8cã\83\95ã\82©ã\83«ã\83\80ã\83¼ã\81®ã\81¨ã\81\8dã\80\81æ\9c\80å¾\8cã\81\8cã\83\91ã\82¹ã\82»ã\83\91ã\83¬ã\83¼ã\82¿ã\81§çµ\82äº\86ã\81\99ã\82\8bã\82\88ã\81\86ã\81«ã\81\99ã\82\8bã\80\82\r
                /// </summary>\r
                /// <param name="path">パス</param>\r
                /// <returns>処理されたパス</returns>\r
@@ -332,7 +338,7 @@ namespace NaGet
                /// <summary>\r
                /// 絶対パスを相対パスに変換して返します。\r
                /// </summary>\r
-               /// <param name="baseDirectoryPath">相対パスの基準のフォルダ</param>\r
+               /// <param name="baseDirectoryPath">相対パスの基準のフォルダ</param>\r
                /// <param name="absPath">絶対パス</param>\r
                /// <returns><code>absPath</code>の絶対パス表現</returns>\r
                public static string GetRelativePath(string baseDirectoryPath, string absPath)\r
@@ -361,7 +367,7 @@ namespace NaGet
                                if (fol == ".") {\r
                                        // 無視\r
                                } else if (fol == "..") {\r
-                                       // 一つ前のフォルダを消す\r
+                                       // ä¸\80ã\81¤å\89\8dã\81®ã\83\95ã\82©ã\83«ã\83\80ã\83¼ã\82\92æ¶\88ã\81\99\r
                                        newFolders.RemoveAt(newFolders.Count-1);\r
                                } else {\r
                                        newFolders.Add(fol);\r
@@ -375,22 +381,36 @@ namespace NaGet
                \r
                #region シリアル化関連\r
                \r
+               \r
                /// <summary>\r
                /// XMLでシリアル化したオブジェクトのXMLファイルを読み込み、デシリアル化したオブジェクトを取得する\r
                /// </summary>\r
                /// <param name="path">XMLファイルのパス</param>\r
+               /// <param name="sr">シリアライザ</param>\r
                /// <returns>デシリアル化されたオブジェクト</returns>\r
-               public static T GetDeserializedObject<T>(string path)\r
+               public static object GetDeserializedObject(string path, System.Xml.Serialization.XmlSerializer sr)\r
                {\r
-                       T retVal = default(T);\r
+                       object retVal = null;\r
                        using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read)) {\r
-                               System.Xml.Serialization.XmlSerializer sr = new System.Xml.Serialization.XmlSerializer(typeof(T));\r
-                               retVal = (T) sr.Deserialize(fs);\r
+                               retVal = sr.Deserialize(fs);\r
                        }\r
                        return retVal;\r
                }\r
                \r
                /// <summary>\r
+               /// XMLでシリアル化したオブジェクトのXMLファイルを読み込み、デシリアル化したオブジェクトを取得する\r
+               /// </summary>\r
+               /// <param name="path">XMLファイルのパス</param>\r
+               /// <returns>デシリアル化されたオブジェクト</returns>\r
+               public static T GetDeserializedObject<T>(string path)\r
+               {\r
+                       T retVal = default(T);\r
+                       System.Xml.Serialization.XmlSerializer sr = new System.Xml.Serialization.XmlSerializer(typeof(T));\r
+                       retVal = (T) GetDeserializedObject(path, sr);\r
+                       return retVal;\r
+               }\r
+               \r
+               /// <summary>\r
                /// オブジェクトをXMLでシリアル化してファイルに書き込む\r
                /// </summary>\r
                /// <param name="path">XMLファイルのパス</param>\r