/** * ヘッダ部分からファイルのエンコードタイプを取得する * * @input inputFilePath: LogViewのファイルパス * @output エンコードの種類 */ public static Encoding GetEncodingText(string inputFilePath) { bool isHeader = false; int count = 0; Encoding encoding = Encoding.UTF8; using (StreamReader sr = new StreamReader(inputFilePath)) { // ヘッダ部分を読み込む <head>~</head> while (sr.Peek() >= 0) { // ファイルを 1 行ずつ読み込む string line = sr.ReadLine().Trim(); // <head>の行が見つかるまではスキップ if (isHeader == false) { if (line.Equals("<head>")) { isHeader = true; } } else { if (line.Equals("</head>")) { break; } // エンコード種別 if (line.Contains("encoding:")) { string[] splitted = line.Split(':'); if (splitted.Length >= 2) { encoding = UUtility.GetEncodingFromStr(splitted[1].ToLower()); } } } count++; if (count > 100) { // ファイルの先頭部分に見つからなかったので打ち切り break; } } return(encoding); } } // GetEncoding()
/** * バイナリログのヘッダ部分を取得 * @input fs : ファイルオブジェクト * */ private void ReadLogHeadBin(UFileStream fs) { // 文字コードを取得 string encStr = fs.GetSizeString(); this.encoding = UUtility.GetEncodingFromStr(encStr); fs.EncodingType = encoding; // ログID情報 logIDs = ReadLogIDsBin(fs); // レーン情報 lanes = ReadLogLanesBin(fs); // アイコン画像 images = ReadLogImagesBin(fs); // ログIDの画像を設定する foreach (LogID logId in logIDs) { logId.Image = images.GetImage(logId.ImageName); } }