//Показывает список доступных обновлений. //Сохранить все файлы программы на сервере. // //UserUpdate - обновление доступно пользователям. //Upload - Загрузить файлы на сервер. //ContentList - Cписок файлов и папок для обновления в определенном формате: // ADDDIR: CustomDorectoryName // DELDIR: CustomDorectoryName // ADDFILE: CustomFileName.txt // DELFILE: CustomFileName.txt /// <summary> /// /// </summary> /// <param name="dt"></param> /// <param name="contentList"></param> /// <param name="doUserUpdate"></param> /// <param name="uploadToServer"></param> /// <returns></returns> private bool UpdateUploadFiles(out System.Data.DataTable dt, string[] contentList, bool doUserUpdate, bool uploadToServer) { dt = new System.Data.DataTable(); string sql = ""; //Для вставки полей в DT. string numberFile; int numberUpdate; string dateRecord = sys.DateTimeToSQLStr(DateTime.Now); string userUpdate = (!doUserUpdate).ToInt().ToString(); string contentType = ""; string operation = ""; string version = Var.ApplicationVersion; string fullName = ""; string path = FBAPath.PathMain; string fileName = ""; string extension = ""; string creationTime; string lastWriteTime; string lastAccessTime; long SizeFile; string hashMD5; string fileData = ""; //Данные в Base64. //Последняя версия в таблице обновлений. sql = "SELECT MAX(NumberUpdate) AS NumberVersion FROM fbaUpdate; "; string NumberUpdateStr = sys.GetValue(DirectionQuery.Remote, sql); if (NumberUpdateStr == "") { NumberUpdateStr = "0"; } numberUpdate = NumberUpdateStr.ToInt() + 1; //Новая варсия. bool ff = true; Type tp = ff.GetType(); dt.Columns.Add("Check", tp); //Выбрать файл для заливки dt.Columns.Add("NumberFile"); //Порядковый номер файла или папки в обновлении dt.Columns.Add("NumberUpdate"); //Порядковый номер обновления. dt.Columns.Add("DateRecord"); //Текущая дата. dt.Columns.Add("UserUpdate"); //true-Пользователям нужно обновляться из это обновления. false-не нужно. false-нужно для тестирования, для отложенного обновления и др. dt.Columns.Add("ContentType"); //1-папка, 2-файл dt.Columns.Add("Operation"); //1-создать, 2-удалить. dt.Columns.Add("Version"); //Версия программы вида 1.0.6335.33362 dt.Columns.Add("FullName"); //Полное имя файла с путем. dt.Columns.Add("Path"); //Начальный каталог программы, т.е. sys.PathMain dt.Columns.Add("Name"); //Имя файла/папки dt.Columns.Add("Extension"); //Расширение файла (для папки здесь пусто) dt.Columns.Add("CreationTime"); //Дата создания папки/файла dt.Columns.Add("LastWriteTime"); dt.Columns.Add("LastAccessTime"); dt.Columns.Add("Size"); //размер файла в байтах. Для папки здесь 0. dt.Columns.Add("MD5"); //Хеш MD5 //DT.Columns.Add("FileData"); //Содержимое файла в кодировке Base64. sql = "DELETE FROM fbaUpdate WHERE Version = '" + version + "'; "; if (!sys.Exec(DirectionQuery.Remote, sql)) { return(false); } var fileprop = new string[16]; var progress1 = new FormProgress("Обновление", "Получение свойств файлов", contentList.Length); progress1.Show(); for (int i = 0; i < contentList.Length; i++) { fullName = contentList[i]; numberFile = (i + 1).ToString(); if (!File.Exists(fileName)) { continue; } var file = new FileInfo(fullName); fileName = file.Name; extension = file.Extension; creationTime = sys.DateTimeToSQLStr(file.CreationTime); lastWriteTime = sys.DateTimeToSQLStr(file.LastWriteTime); lastAccessTime = sys.DateTimeToSQLStr(file.LastAccessTime); SizeFile = file.Length; hashMD5 = Crypto.FileHashMD5Calc(fullName); fileprop[0] = numberFile; fileprop[1] = numberUpdate.ToString(); fileprop[2] = dateRecord; fileprop[3] = userUpdate; fileprop[4] = ""; //ContentType.ToString(); fileprop[5] = ""; //Operation.ToString(); fileprop[6] = version; fileprop[7] = fullName; fileprop[8] = path; fileprop[9] = fileName; fileprop[10] = extension; fileprop[11] = creationTime; fileprop[12] = lastWriteTime; fileprop[13] = lastAccessTime; fileprop[14] = SizeFile.ToString(); fileprop[15] = hashMD5; DataRow row = dt.NewRow(); row.ItemArray = fileprop; dt.Rows.Add(row); if (uploadToServer) { fileData = ""; string errorMes; const bool showMes = true; if (!FBAFile.FileReadToBase64(fullName, out fileData, out errorMes, showMes)) { return(false); } const bool saveHashToEndFile = false; if (!FBAFile.FileGetBase64WithHashMD5(fileName, saveHashToEndFile, out fileData, out hashMD5)) { return(false); } sql = @"INSERT INTO fbaUpdate (NumberFile, NumberUpdate, DateRecord, UserUpdate, " + "ContentType, Operation, Version, CurrentVersion, FullName, Path, Name, Extension, " + "CreationTime, LastWriteTime, LastAccessTime, Size, MD5, " + "FileData) " + "VALUES (" + "'" + numberFile + "','" + numberUpdate + "','" + dateRecord + "','" + userUpdate + "'," + "'" + contentType + "','" + operation + "','" + version + "','" + version + "','" + fullName + "','" + path + "','" + fileName + "','" + extension + "'," + "'" + creationTime + "','" + lastWriteTime + "','" + lastAccessTime + "'," + SizeFile.ToString() + ", '" + hashMD5 + "'," + "'" + fileData + "'); " + Var.CR; if (!sys.Exec(DirectionQuery.Remote, sql)) { return(false); } } progress1.Inc(); } //В конце загрузки файлов на сервер обновляем информцию о текущей версии. if (uploadToServer) { sql = @"UPDATE fbaUpdate SET CurrentVersion = '" + version + "'; " + Var.CR; if (!sys.Exec(DirectionQuery.Remote, sql)) { return(false); } } progress1.Dispose(); return(true); }
/// <summary> /// Получить список файлов решения /// </summary> /// <returns></returns> private bool GetFilesFBA() { //Последняя версия в таблице обновлений. int numberUpdate = GetLastUpdate() + 1; //Новая версия. if (dt.Columns.Count == 0) { dt.Columns.Add("NumberFile"); //Порядковый номер файла или папки в обновлении dt.Columns.Add("NumberUpdate"); //Порядковый номер обновления. dt.Columns.Add("Version"); //Версия программы вида 1.0.6335.33362 dt.Columns.Add("FullName"); //Полное имя файла с путем. dt.Columns.Add("Path"); //Начальный каталог программы, т.е. sys.PathMain dt.Columns.Add("Name"); //Имя файла/папки dt.Columns.Add("Extension"); //Расширение файла (для папки здесь пусто) dt.Columns.Add("CreationTime"); //Дата создания папки/файла dt.Columns.Add("LastWriteTime"); dt.Columns.Add("LastAccessTime"); dt.Columns.Add("Size"); //размер файла в байтах. Для папки здесь 0. dt.Columns.Add("MD5"); //Хеш MD5 } dt.Rows.Clear(); string[] contentList = FBAFile.FilesInFolder(FBAPath.PathDebug, "*.*", "", "", true, true, true);; //Для вставки полей в DT. string numberFile = ""; string dateRecord = sys.DateTimeToSQLStr(DateTime.Now); string version = Var.ApplicationVersion; string fullName = ""; string filePath = ""; string fileName = ""; string extension = ""; string creationTime = ""; string lastWriteTime = ""; string lastAccessTime = ""; long SizeFile; string hashMD5; var progress1 = new FormProgress("Обновление", "Получение свойств файлов", contentList.Length); progress1.Show(); var fileprop = new string[dt.Columns.Count]; for (int i = 0; i < contentList.Length; i++) { try { fullName = contentList[i]; if (string.IsNullOrEmpty(fullName)) { continue; } if (!File.Exists(fullName)) { continue; } var file = new FileInfo(fullName); filePath = file.DirectoryName; fileName = file.Name; numberFile = (i + 1).ToString(); extension = file.Extension; creationTime = sys.DateTimeToSQLStr(file.CreationTime); lastWriteTime = sys.DateTimeToSQLStr(file.LastWriteTime); lastAccessTime = sys.DateTimeToSQLStr(file.LastAccessTime); SizeFile = file.Length; hashMD5 = Crypto.FileHashMD5Calc(fullName); fileprop[0] = numberFile; fileprop[1] = numberUpdate.ToString(); fileprop[2] = version; fileprop[3] = fullName; fileprop[4] = filePath;; fileprop[5] = fileName; fileprop[6] = extension; fileprop[7] = creationTime; fileprop[8] = lastWriteTime; fileprop[9] = lastAccessTime; fileprop[10] = SizeFile.ToString(); fileprop[11] = hashMD5; DataRow row = dt.NewRow(); row.ItemArray = fileprop; dt.Rows.Add(row); progress1.Inc(); } catch (Exception ex) { sys.SM("File Number " + numberFile + Var.CR + "File name: " + fullName + Var.CR + ex.Message); continue; } } const bool ff = true; Type tp = ff.GetType(); dt.Columns.Add("Check", tp); //Выбрать файл для заливки dt.Columns["Check"].SetOrdinal(0); CheckFiles(false); //dt.Columns[0].DataType = tp; progress1.Close(); return(true); }