OSDN Git Service

na-get-lib,チケット #36130 に関連して、更新パッケージから非対応パッケージを除外するようにした
[applistation/AppliStation.git] / na-get-lib / NaGet / Utils.cs
index a11ce94..1c240cf 100644 (file)
@@ -15,15 +15,8 @@ namespace NaGet
        /// <summary>\r
        /// 雑多な便利メソッドを集めたクラス\r
        /// </summary>\r
-       public sealed class Utils\r
+       public static class Utils\r
        {\r
-               /// <summary>\r
-               /// 呼び出し禁止\r
-               /// </summary>\r
-               private Utils()\r
-               {\r
-               }\r
-               \r
                #region 汎用的なオブジェクト操作メソッド\r
                \r
                /// <summary>\r
@@ -181,17 +174,23 @@ namespace NaGet
                /// <param name="url">対象のurl</param>\r
                public static string Url2filename(Uri url)\r
                {\r
-                       string filename = Path.GetFileName(System.Web.HttpUtility.UrlDecode(url.ToString(), Encoding.UTF8));\r
+                       string filename = Path.GetFileName(System.Web.HttpUtility.UrlDecode(url.AbsolutePath, Encoding.UTF8));\r
+                       \r
+                       if (string.IsNullOrEmpty(filename)) {\r
+                               filename = Path.GetFileName(System.Web.HttpUtility.UrlDecode(url.ToString(), Encoding.UTF8));\r
+                       }\r
                        \r
                        int pos;\r
                        if ((pos = filename.IndexOfAny(Path.GetInvalidFileNameChars())) >= 0) {\r
                                // 不正な文字が含まれているならば、それ以降を削除\r
                                filename = filename.Substring(0, pos);\r
-                               // そうしてしまったら文字の内容がまったくなくなってしまったら、ランダムな名に\r
-                               if (filename.Length == 0) {\r
-                                       filename = Path.GetFileName(Path.GetTempFileName());\r
-                               }\r
                        }\r
+                       \r
+                       // そうしてしまったら文字の内容がまったくなくなってしまったら、現在時刻から取得\r
+                       if (filename.Length == 0) {\r
+                               filename = string.Format("tmp_{0}", DateTime.Now.Ticks);\r
+                       }\r
+                       \r
                        return filename;\r
                        //return UrlDecode(Path.GetFileName(url), Encoding.UTF8);\r
                }\r
@@ -381,22 +380,38 @@ 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
+                               using (System.Xml.XmlReader xreader = System.Xml.XmlReader.Create(fs)) {\r
+                                       retVal = sr.Deserialize(xreader);\r
+                               }\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