/// <summary> /// Возвращает информацию о сессии /// </summary> /// <param name="fileName">Имя файла сессии</param> /// <returns>Информация о сессии</returns> public BalanceSessionInfo LoadSessionInfo(string fileName, int versionNumber = 1) { try { if (versionNumber == 1) { using (System.IO.Packaging.Package package = System.IO.Packaging.Package.Open(fileName, FileMode.Open)) { return(LoadSessionInfoFromPackage(package.GetPart(System.IO.Packaging.PackUriHelper.CreatePartUri(new Uri(PART_Info, UriKind.Relative))))); } } else if (versionNumber == 0) { return(LoadSessionInfoFromOldFileFormat(fileName)); } else { throw new ArgumentOutOfRangeException("Session file version number"); } } catch (FileFormatException) { return(LoadSessionInfoFromOldFileFormat(fileName)); } catch (IOException ioe) { EmcosSiteWrapperApp.LogException(ioe); return(null); } catch { return(null); } }
/// <summary> /// Загрузка данных /// </summary> /// <returns>True если загрузка произошла успешно</returns> public bool Load() { bool result = false; // имя файла с сессией string sessionFileNameToLoad = null; // проверка есть файл, с которым работали в последний раз if (File.Exists(Path.Combine(SESSIONS_FOLDER, "lastsession"))) { EmcosSiteWrapperApp.LogInfo("Обнаружен файл с именем файла последней сессии."); var lastusedfile = string.Empty; try { EmcosSiteWrapperApp.LogInfo("Попытка чтения имени файла последней сессии."); // чтение имени файла lastusedfile = File.ReadAllText(Path.Combine(SESSIONS_FOLDER, "lastsession")).Trim(); EmcosSiteWrapperApp.LogInfo("Имя файла последней сессии получено."); if (File.Exists(lastusedfile)) { sessionFileNameToLoad = lastusedfile; EmcosSiteWrapperApp.LogInfo("Файл последней сессии существует, попытаемся его загрузить."); } else { EmcosSiteWrapperApp.LogInfo("Указанный файл последней сессии не найден."); } } catch (System.IO.IOException ex) { EmcosSiteWrapperApp.LogInfo("Ошибка при чтении имени файла последней сессии."); _callBackAction(ex); } } else { if (String.IsNullOrWhiteSpace(BALANCE_SESSION_FILENAME) || File.Exists(Path.Combine(SESSIONS_FOLDER, BALANCE_SESSION_FILENAME + SESSION_FILE_EXTENSION)) == false) { EmcosSiteWrapperApp.LogInfo("Сессия не обнаружена."); return(false); } } // if (LoadSessionData(sessionFileNameToLoad)) { EmcosSiteWrapperApp.LogInfo("Сессия обнаружена и загружена."); ActiveSession.Info.IsLoaded = true; Loaded?.Invoke(null, EventArgs.Empty); result = true; } else { EmcosSiteWrapperApp.LogInfo(String.Format("Не удалось загрузить сессию. Файл [{0}].", sessionFileNameToLoad ?? BALANCE_SESSION_FILENAME + SESSION_FILE_EXTENSION)); } return(result); }
/// <summary> /// Инициализация - загрузка точек измерений, загрузка последней сессии /// </summary> public void Init() { try { // Проверка наличия папок согласно настроек и наличия файла с описанием точек if (System.IO.Directory.Exists(SESSIONS_FOLDER) == false) { Directory.CreateDirectory(SESSIONS_FOLDER); } if (System.IO.Directory.Exists(SETTINGS_FOLDER) == false) { Directory.CreateDirectory(SETTINGS_FOLDER); } if (File.Exists(CONFIGURATION_FILENAME) == false) { EmcosSiteWrapperApp.LogInfo("Файл с точками не найден."); // попытка построить дерево точек из сервиса int rootCode = _settings.RootEmcosPointCode; //var bytes = Properties.Resources.DataModel_xml_gz; //Stream stream = new MemoryStream(bytes); //var gzip = new System.IO.Compression.GZipStream(stream, System.IO.Compression.CompressionMode.Decompress, false); //using (FileStream fs = new FileStream(LIST_Balance_POINTS_FILENAME, FileMode.Create)) //{ // gzip.CopyTo(fs); //} //File.WriteAllBytes(LIST_Balance_POINTS_FILENAME, Properties.Resources.DataModel_xml_gz); } } catch (Exception ex) { _callBackAction(ex); } // создание в фоне списка сессий var task = System.Threading.Tasks.Task.Factory.StartNew(() => FillSessionsList()); // чтение конфигурации if (LoadConfiguration() == false) { EmcosSiteWrapperApp.LogWarning("Конфигурация не загружена"); } else { EmcosSiteWrapperApp.LogWarning("Конфигурация загружена"); } // загрузка сессии Load(); }
/// <summary> /// Возвращает версию файла сессии /// </summary> /// <param name="fileName">Имя файла сессии</param> /// <returns>-1 - файл не поддреживается, 0 - файл старого формата, 1 - нового</returns> public int GetSessionVersion(string fileName) { byte[] zipHeader = { 0x1F, 0x8B, 0x08 }; byte[] packageHeader = { 0x50, 0x4B, 0x03, 0x04, 0x14 }; if (Path.GetExtension(fileName) == SESSION_FILE_EXTENSION) { byte[] bytes = new byte[5]; using (System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read)) using (System.IO.MemoryStream mso = new System.IO.MemoryStream()) { fs.Read(bytes, 0, bytes.Length); mso.Write(bytes, 0, bytes.Length); } if (bytes.Take(3).SequenceEqual(zipHeader)) { return(IsSupportedSessionVersion(LoadVersionFromZip(fileName)) ? 0 : -1); } else if (bytes.Take(5).SequenceEqual(packageHeader)) { try { BalanceSessionInfo info = LoadSessionInfo(fileName); return(IsSupportedSessionVersion(info.Version) ? 1 : -1); } catch (IOException ioe) { EmcosSiteWrapperApp.LogException(ioe); return(-1); } catch (FileFormatException ffe) { EmcosSiteWrapperApp.LogException(ffe); return(-1); } catch { return(-1); } } else { return(-1); } } else { return(-1); } }
/// <summary> /// Загрузка сессии /// </summary> /// <param name="fileName">Имя файла, если не указано, то загрузка из стандартного файла <see cref="BALANCE_SESSION_FILENAME"/></param> /// <returns>True если загрузка произошла успешно</returns> private bool LoadSessionData(string fileName = null) { bool mustStoreLastSessionFileName = true; try { if (String.IsNullOrWhiteSpace(fileName)) { fileName = BALANCE_SESSION_FILENAME + SESSION_FILE_EXTENSION; mustStoreLastSessionFileName = false; } else if (Path.GetExtension(fileName).ToLowerInvariant() != SESSION_FILE_EXTENSION) { fileName = fileName + SESSION_FILE_EXTENSION; } var fi = new FileInfo(Path.Combine(SESSIONS_FOLDER, fileName)); if (fi.Exists == false) { return(false); } BalanceSession balanceSession = null; bool isOldVersionFile = false; try { if (Path.IsPathRooted(fileName) == false) { fileName = Path.Combine(SESSIONS_FOLDER, fileName); } // попытка прочитать файл как пакет using (System.IO.Packaging.Package package = System.IO.Packaging.Package.Open(fileName, FileMode.Open, FileAccess.Read)) { BalanceSessionInfo info = LoadSessionInfoFromPackage(package.GetPart(System.IO.Packaging.PackUriHelper.CreatePartUri(new Uri(PART_Info, UriKind.Relative)))); if (IsSupportedSessionVersion(info.Version)) { void unknownVersion() { string msg = String.Format("Файл '{1}'\nнеизвестной версии - {0}\nЗагрузка невозможна.\nОбновите программу или обратитесь к разработчику.", info.Version, fi.FullName); EmcosSiteWrapperApp.LogError(msg); EmcosSiteWrapperApp.ShowError(msg); } switch (info.Version.Major) { case 1: switch (info.Version.Minor) { case 0: isOldVersionFile = true; break; case 1: balanceSession = LoadDataFromFileVersion_1_1(package); break; default: unknownVersion(); return(false); } break; default: unknownVersion(); return(false); } } } } catch (IOException ioe) { EmcosSiteWrapperApp.LogException(ioe); isOldVersionFile = true; } catch (Exception e) { isOldVersionFile = true; } if (isOldVersionFile) { balanceSession = LoadDataFromFileVersion_1_0(fi.FullName); } if (mustStoreLastSessionFileName) { File.WriteAllText(Path.Combine(SESSIONS_FOLDER, "lastsession"), fileName); } ActiveSession = balanceSession; return(balanceSession != null); } catch (Exception ex) { _callBackAction(ex); ActiveSession = null; return(false); } }