Beispiel #1
0
        /// <summary>
        /// Back up to file
        /// </summary>
        /// <param name="folderPath">folder will contain backup file</param>
        /// <returns></returns>
        public string BackupToFile(string folderPath)
        {
            using (var entityConntext = new GeoViewerEntities())
            {
                SecurityBLL.Current.CheckPermissionThrowException(SecurityBLL.ROLE_DATA_MANAGE);
                // Make backup folder name
                string backupFolder = folderPath + @"\GeoViewer_" + DateTime.Now.ToString("ddMMyyyy-hhmm") + "_" +
                                      GeneralUtils.GenerateRandomString(4);
                // Create temp folder
                Directory.CreateDirectory(backupFolder);

                // Copy files data
                foreach (var obj in entityConntext.Loggers)
                {
                    // Copy data files
                    FileInfo file = new FileInfo(obj.DataPath);
                    if (file.Exists)
                    {
                        File.Copy(obj.DataPath, backupFolder + @"\" + obj.LoggerID + file.Extension, true);
                    }
                    else
                    {
                        CopyFolder(obj.DataPath, backupFolder + @"\" + obj.LoggerID);
                    }
                }
                // Back up database
                entityConntext.ExecuteStoreCommand(
                    "backup database " + databaseName + "  to disk = '" + backupFolder + @"\database.bak'",
                    null);

                // Copy Pictures folder
                CopyFolder("Pictures", backupFolder + @"\Pictures");

                // Zip to file
                ZipFile zip = new ZipFile();
                zip.AddDirectory(backupFolder);
                zip.Save(backupFolder + ".zip");

                // Delete file after zipped
                DeleteFolder(backupFolder);

                return backupFolder + ".zip";
            }
        }
Beispiel #2
0
        /// <summary>
        /// Restore from file
        /// </summary>
        /// <param name="filePath">Backup file to restore</param>
        public void RestoreFromFile(string filePath)
        {
            using (var entityConntext = new GeoViewerEntities())
            {
                SecurityBLL.Current.CheckPermissionThrowException(SecurityBLL.ROLE_DATA_MANAGE);
                // Check the file exist
                FileInfo fileInfo = new FileInfo(filePath);
                if (!fileInfo.Exists) throw new Exception(Resources.Error_BackupFileNotExist);

                // First extract the backup zip file
                string folder = fileInfo.FullName.Substring(0, fileInfo.FullName.LastIndexOf("."));
                if (Directory.Exists(folder)) DeleteFolder(folder);
                ZipFile zip = ZipFile.Read(filePath);
                zip.ExtractAll(folder);
                Console.WriteLine("Extract temp file to folder " + folder);

                // Restore the database
                string databasePath = folder + @"\database.bak";
                if (!File.Exists(databasePath)) throw new Exception(Resources.Error_DatabaseNotExist);
                entityConntext.ExecuteStoreCommand("use master restore database " + databaseName + "  from disk = '" +
                                                   databasePath + "'");
                Console.WriteLine("Restore database ok!");
                // Refresh data
                //AppContext.Current.RefreshEntityContext();
                AccountBLL.Current.Logout();
                AppContext.Current.OpenProject = null;

                // Overwrite data files
                foreach (var obj in entityConntext.Loggers)
                {
                    if (!obj.DataPath.Contains("."))
                    {
                        // Copy folder
                        if (Directory.Exists(folder + @"\" + obj.LoggerID))
                            CopyFolder(folder + @"\" + obj.LoggerID, obj.DataPath);
                        Console.WriteLine("Copy folder to " + obj.DataPath);
                    }
                    else
                    {
                        // Copy file
                        string sourceFile = folder + @"\" + obj.LoggerID +
                                            obj.DataPath.Substring(obj.DataPath.LastIndexOf("."));
                        if (File.Exists(sourceFile))
                        {
                            File.Copy(sourceFile, obj.DataPath, true);
                            Console.WriteLine("Copy file to " + obj.DataPath);
                        }
                    }

                }
                // Overwrite picture
                CopyFolder(folder + @"\Pictures", "Pictures");

                // Delete temp file and folder
                DeleteFolder(folder);
                Console.WriteLine("Delete folder " + folder);
            }
        }