/// <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
/// <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
\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