private long AddFilesInfoToUpdateLists(SqlDataReader reader) { long totalBytes = 0; Guid fileId; string filePath; string hashCode; bool isDevXpress; long fileSize; List <string> filesToDelete = new List <string>(); while (reader.Read()) { filePath = reader["Path"].ToString().Trim(); hashCode = reader["HashCode"].ToString().Trim(); isDevXpress = (bool)reader["DXDLL"]; fileSize = (long)reader["FileSize"]; if (FileHaveToBeUpdated(filePath, fileSize, hashCode, isDevXpress)) { fileId = (Guid)reader["RowId"]; DownloadFileInfo fileInfo = new DownloadFileInfo(filePath, fileSize); filesToUpdate.Add(fileId, fileInfo); #region Delecting is temporary file exists, is it fully downloaded string temporaryFileName = GetTemporaryFilePath(fileId); if (File.Exists(temporaryFileName)) { bool sizesEquals = fileSize == (new FileInfo(temporaryFileName).Length); if (!sizesEquals) { filesToDownLoad.Add(fileId, fileInfo); filesToDelete.Add(temporaryFileName); } } else { totalBytes += fileInfo.FileSize; filesToDownLoad.Add(fileId, fileInfo); } #endregion } } // Delete not fully downloaded files filesToDelete.ForEach(fileToDeletePath => File.Delete(fileToDeletePath)); return(totalBytes); }
private bool DownloadUpdateFiles(long totalBytes) { RemoveFilesSchema(); string queryText = string.Format("select f.RowId Id, f.UpdateFile FileData from {0}Update f join @FilesId ids on ids.FileId = f.RowId order by f.RowId", App.SelectedSolution.SolutionName); int tryNumber = 1; int taskSize = filesToDownLoad.Count; long totalDownloadedBytes = 0; while (filesToDownLoad.Count > 0 && tryNumber <= MAX_DOWNLOADING_ATTEMPTS_COUNT) { DataTable filesToDownLoadTable = GetFilesToDownLoadTable(); SqlConnection conn = DatabaseHelper.GetUpdateConnection(); try { conn.Open(); using (SqlCommand cmd = new SqlCommand(queryText, conn)) { SqlParameter tableParameter = cmd.Parameters.AddWithValue("@FilesId", filesToDownLoadTable); tableParameter.SqlDbType = SqlDbType.Structured; tableParameter.TypeName = "tvp_FilesToDownload"; using (SqlDataReader dataReader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)) { while (dataReader.Read()) { Guid fileId = (Guid)dataReader["Id"]; DownloadFileInfo fileInfo = filesToDownLoad[fileId]; string temporaryFilePath = GetTemporaryFilePath(fileId); if (saveTemporaryFile(temporaryFilePath, fileInfo.FileSize, dataReader)) { filesToDownLoad.Remove(fileId); totalDownloadedBytes += fileInfo.FileSize; downloadingComplateProgress = (int)(1000 * totalDownloadedBytes / totalBytes); } } } } } catch (Exception exp) { Trace.WriteLine(String.Format("Ошибка получения файлов: {0}", exp.Message)); return(false); } finally { if (conn != null) { ((IDisposable)conn).Dispose(); } } } bool allFilesDownloaded = filesToDownLoad.Count == 0; if (allFilesDownloaded) { return(WriteFilesSchema()); } return(allFilesDownloaded); }