internal static Document AddDocument(string personnelNumber, string file, int?parentDocumentID, bool attachToDossier, Njit.Program.ComponentOne.Enums.SaveFormats imageFormat, Njit.Program.ComponentOne.Enums.CompressionTypes imageCompression, ArchiveTab archivetab) { System.IO.FileInfo fileInfo = new FileInfo(file); if (Setting.Archive.ThisProgram.LoadedArchiveSettings.MaxDocumentsSize > 0) { if (fileInfo.Length / 1024 > Setting.Archive.ThisProgram.LoadedArchiveSettings.MaxDocumentsSize) { throw new Exception(string.Format("حجم فایل نباید از {0} کیلوبایت بیشتر باشد\r\nحجم این فایل {1} کیلوبایت است", Setting.Archive.ThisProgram.LoadedArchiveSettings.MaxDocumentsSize, fileInfo.Length / 1024)); } } long number = Controller.Archive.DocumentController.GetNewDocumentNumber(personnelNumber); string fileExtension = Path.GetExtension(file).ToLower(); Model.Archive.Dossier dossier = Controller.Archive.DossierController.Select(personnelNumber); if (imageExtensions.Contains(fileExtension)) { switch (imageFormat) { case Njit.Program.ComponentOne.Enums.SaveFormats.None: break; case Njit.Program.ComponentOne.Enums.SaveFormats.OnePdf: if (fileExtension != ".pdf") { fileExtension = ".pdf"; string newfile = GetUniqFileName(fileExtension); Image image = Image.FromFile(file); Njit.Pdf.CreatePDF.FromImages(new Image[] { image }, newfile, 0, Njit.Pdf.CreatePDF.PageOrientation.عمودی, Njit.Pdf.CreatePDF.PageSize.OriginalSize); image.Dispose(); file = newfile; } break; case Njit.Program.ComponentOne.Enums.SaveFormats.Pdf: if (fileExtension != ".pdf") { fileExtension = ".pdf"; string newfile = GetUniqFileName(fileExtension); Image image = Image.FromFile(file); Njit.Pdf.CreatePDF.FromImages(new Image[] { image }, newfile, 0, Njit.Pdf.CreatePDF.PageOrientation.عمودی, Njit.Pdf.CreatePDF.PageSize.OriginalSize); image.Dispose(); file = newfile; } break; case Njit.Program.ComponentOne.Enums.SaveFormats.OneMultiTiff: if (fileExtension != ".tiff" && fileExtension != ".tif") { fileExtension = ".tiff"; string newfile = GetUniqFileName(fileExtension); Image image = Image.FromFile(file); Njit.Common.Helpers.ImageHelper.ConvertImage(image, System.Drawing.Imaging.ImageFormat.Tiff, GetImageCompression(imageCompression), newfile); image.Dispose(); file = newfile; } break; case Njit.Program.ComponentOne.Enums.SaveFormats.Tiff: if (fileExtension != ".tiff" && fileExtension != ".tif") { fileExtension = ".tiff"; string newfile = GetUniqFileName(fileExtension); Image image = Image.FromFile(file); Njit.Common.Helpers.ImageHelper.ConvertImage(image, System.Drawing.Imaging.ImageFormat.Tiff, GetImageCompression(imageCompression), newfile); image.Dispose(); file = newfile; } break; case Njit.Program.ComponentOne.Enums.SaveFormats.JPEG: if (fileExtension != ".jpg" && fileExtension != ".jpeg") { fileExtension = ".jpg"; string newfile = GetUniqFileName(fileExtension); Image image = Image.FromFile(file); Njit.Common.Helpers.ImageHelper.ConvertImage(image, System.Drawing.Imaging.ImageFormat.Jpeg, GetImageCompression(imageCompression), newfile); image.Dispose(); file = newfile; } break; case Njit.Program.ComponentOne.Enums.SaveFormats.PNG: if (fileExtension != ".png") { fileExtension = ".png"; string newfile = GetUniqFileName(fileExtension); Image image = Image.FromFile(file); Njit.Common.Helpers.ImageHelper.ConvertImage(image, System.Drawing.Imaging.ImageFormat.Png, GetImageCompression(imageCompression), newfile); image.Dispose(); file = newfile; } break; case Njit.Program.ComponentOne.Enums.SaveFormats.BMP: if (fileExtension != ".bmp") { fileExtension = ".bmp"; string newfile = GetUniqFileName(fileExtension); Image image = Image.FromFile(file); Njit.Common.Helpers.ImageHelper.ConvertImage(image, System.Drawing.Imaging.ImageFormat.Bmp, GetImageCompression(imageCompression), newfile); image.Dispose(); file = newfile; } break; default: throw new Exception(); } } string fileNameToSaveInDatabase = Njit.Common.PublicMethods.ReplaceInvalidPathAndFileNameChars(personnelNumber, "-") + "-" + number.ToString() + fileExtension; string destinationFile = null; if (Setting.Archive.ThisProgram.LoadedArchiveSettings.UseDatabase == false) { destinationFile = Path.Combine(dossier.FilesPathOrDatabaseName, fileNameToSaveInDatabase); Njit.Common.SystemUtility sysUtility = Njit.Program.Options.GetSystemUtility(DataAccess.ArchiveDataAccess.GetNewInstance().Connection, Setting.Program.ThisProgram.NetworkName, Setting.Program.ThisProgram.NetworkPort); int i = 1; while (sysUtility.FileExists(destinationFile)) { fileNameToSaveInDatabase = Njit.Common.PublicMethods.ReplaceInvalidPathAndFileNameChars(personnelNumber, "-") + "-" + number.ToString() + " (" + i.ToString() + ")" + fileExtension; destinationFile = Path.Combine(dossier.FilesPathOrDatabaseName, fileNameToSaveInDatabase); i++; } } Model.Archive.Document document = Model.Archive.Document.GetNewInstance(personnelNumber, number.ToString(), fileNameToSaveInDatabase, archivetab.ID, attachToDossier, parentDocumentID, Controller.Archive.DocumentController.GetMaxDocumentIndex(personnelNumber) + 1); var archiveDc = Model.Archive.ArchiveDataClassesDataContext.GetNewInstance(); Model.ArchiveDocument.DocumentDataClassesDataContext documentDc = null; if (Setting.Archive.ThisProgram.LoadedArchiveSettings.UseDatabase) { documentDc = Model.ArchiveDocument.DocumentDataClassesDataContext.GetNewInstance(Setting.Archive.ThisProgram.LoadedArchiveSettings.DocumentsPathOrDatabaseName); } archiveDc.Connection.Open(); archiveDc.Transaction = archiveDc.Connection.BeginTransaction(); if (documentDc != null) { documentDc.Connection.Open(); documentDc.Transaction = documentDc.Connection.BeginTransaction(); } try { archiveDc.Documents.InsertOnSubmit(document); archiveDc.SubmitChanges(); archiveDc.Transaction.Commit(); if (documentDc != null) { Model.ArchiveDocument.Document doc = Model.ArchiveDocument.Document.GetNewInstance(document.ID, new System.Data.Linq.Binary(System.IO.File.ReadAllBytes(file))); documentDc.Documents.InsertOnSubmit(doc); documentDc.SubmitChanges(); documentDc.Transaction.Commit(); } } catch (Exception ex) { archiveDc.Transaction.Rollback(); if (documentDc != null) { documentDc.Transaction.Rollback(); } throw new Exception("خطا در ثبت اطلاعات" + "\r\n\r\n" + ex.Message); } finally { archiveDc.Connection.Close(); if (documentDc != null) { documentDc.Connection.Close(); } } if (Setting.Archive.ThisProgram.LoadedArchiveSettings.UseDatabase == false) { FileStream serverFileStream = null; FileStream clientFileStream = null; try { Njit.Common.SystemUtility sysUtility = Njit.Program.Options.GetSystemUtility(DataAccess.ArchiveDataAccess.GetNewInstance().Connection, Setting.Program.ThisProgram.NetworkName, Setting.Program.ThisProgram.NetworkPort); if (!sysUtility.DirectoryExists(dossier.FilesPathOrDatabaseName)) { sysUtility.CreateDirectory(dossier.FilesPathOrDatabaseName); } serverFileStream = sysUtility.CreateFile(destinationFile); clientFileStream = File.OpenRead(file); byte[] buffre = new byte[1 * 1024 * 1024]; int readCount = 0; do { readCount = clientFileStream.Read(buffre, 0, buffre.Length); serverFileStream.Write(buffre, 0, readCount); }while (readCount > 0); clientFileStream.Close(); serverFileStream.Close(); clientFileStream.Dispose(); serverFileStream.Dispose(); } catch (Exception ex) { if (clientFileStream != null) { clientFileStream.Dispose(); } if (serverFileStream != null) { serverFileStream.Dispose(); } throw new Exception("خطا در ذخیره فایل" + "\r\n" + file + "\r\n\r\n" + ex.Message); } } return(document); }
private void backgroundWorkerCopy_DoWork(object sender, DoWorkEventArgs e) { int counter = 0; backgroundWorkerCopy.ReportProgress(0); amountOfBytesCopied = 0; byte[] buffer = new byte[bufferLenght]; if (destinationPath != null && destinationSystemUtility != null && !destinationSystemUtility.DirectoryExists(destinationPath)) { destinationSystemUtility.CreateDirectory(destinationPath); } startDateTime = DateTime.Now; for (int i = 0; i < sourceFiles.Length; i++) { if (backgroundWorkerCopy.CancellationPending) { e.Cancel = true; e.Result = counter; return; } string destinationFile = null; if (destinationPath != null) { if (useDateTimeForFileNames == false) { destinationFile = System.IO.Path.Combine(destinationPath, System.IO.Path.GetFileName(sourceFiles[i])); } else { destinationFile = System.IO.Path.Combine(destinationPath, GetNewFileName()) + System.IO.Path.GetExtension(sourceFiles[i]); int index = 1; while (System.IO.File.Exists(destinationFile)) { destinationFile = System.IO.Path.Combine(destinationPath, GetNewFileName() + " (" + (++index).ToString() + ")") + System.IO.Path.GetExtension(sourceFiles[i]); } } } else if (destinationFiles != null) { destinationFile = destinationFiles[i]; } if (saveAction != null) { try { saveAction(sourceFiles[i]); } catch (Exception ex) { throw new Exception("خطا در ذخیره فایل" + "\r\n" + sourceFiles[i] + "\r\n" + "\r\n" + ex.Message); } System.IO.FileInfo fileInfo = new System.IO.FileInfo(sourceFiles[i]); amountOfBytesCopied += fileInfo.Length; backgroundWorkerCopy.ReportProgress((int)(100 * amountOfBytesCopied / totalLenght), sourceFiles[i]); } else { System.IO.FileStream sourceStream = null; System.IO.FileStream destinationStream = null; try { sourceStream = System.IO.File.OpenRead(sourceFiles[i]); destinationStream = destinationSystemUtility.CreateFile(destinationFile); int readCount; do { if (backgroundWorkerCopy.CancellationPending) { e.Cancel = true; if (sourceStream != null) { sourceStream.Close(); sourceStream.Dispose(); } if (destinationStream != null) { destinationStream.Close(); destinationStream.Dispose(); } try { destinationSystemUtility.DeleteFile(destinationFile); } catch { } e.Result = counter; return; } readCount = sourceStream.Read(buffer, 0, buffer.Length); destinationStream.Write(buffer, 0, readCount); amountOfBytesCopied += readCount; backgroundWorkerCopy.ReportProgress((int)(100 * amountOfBytesCopied / totalLenght), sourceFiles[i]); }while (readCount > 0); } finally { if (sourceStream != null) { sourceStream.Close(); sourceStream.Dispose(); } if (destinationStream != null) { destinationStream.Close(); destinationStream.Dispose(); } } } counter++; } backgroundWorkerCopy.ReportProgress(100); e.Result = counter; }
/// <summary> /// پشتیبان گیری از پایگاه داده /// </summary> /// <param name="dataAccess">کلاس دسترسی به داده ها</param> /// <param name="owner">فرمی که این کلاس در آن صدا زده شده است</param> /// <param name="databaseName">نام پایگاه داده</param> /// <param name="backupFile">آدرس فایل پشتیبان</param> /// <param name="showErrorMessageBox">پیام خطا نمایش داده شود؟</param> /// <param name="showQuestionMessageBox">در صورتی که فایل از قبل وجود داشته باشد سوال بازنویسی فایل پرسیده شود؟</param> public static BackupResult BackupDatabase(Njit.Common.SystemUtility systemUtility, Njit.Sql.IDataAccess dataAccess, IWin32Window owner, string databaseName, string backupFile, bool showErrorMessageBox, bool showQuestionMessageBox) { Form form = owner == null ? null : owner as Form; try { systemUtility.Hello(); } catch { if (showErrorMessageBox) { SetTopMost(form, false); PersianMessageBox.Show(owner, "خطا در دسترسی به سرور", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); } return(BackupResult.ServerError); } if (!systemUtility.DirectoryExists(System.IO.Path.GetDirectoryName(backupFile))) { try { systemUtility.CreateDirectory(System.IO.Path.GetDirectoryName(backupFile)); } catch { if (showErrorMessageBox) { SetTopMost(form, false); PersianMessageBox.Show(owner, "خطا در دسترسی به فایل های پشتیبان\nمسیر فایل های پشتیبان را تغییر دهید", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); } return(BackupResult.PathError); } } foreach (char c in System.IO.Path.GetInvalidFileNameChars()) { if (System.IO.Path.GetFileName(backupFile).Contains(c.ToString())) { if (showErrorMessageBox) { SetTopMost(form, false); PersianMessageBox.Show(owner, "خطا در نام فایل پشتیبان" + Environment.NewLine + "نام فایل پشتیبان صحیح نیست", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); } return(BackupResult.PathError); } } foreach (char c in System.IO.Path.GetInvalidPathChars()) { if (System.IO.Path.GetDirectoryName(backupFile).Contains(c.ToString())) { if (showErrorMessageBox) { SetTopMost(form, false); PersianMessageBox.Show(owner, "خطا در مسیر فایل پشتیبان" + Environment.NewLine + "مسیر فایل پشتیبان صحیح نیست", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); } return(BackupResult.PathError); } } if (systemUtility.FileExists(backupFile) && showQuestionMessageBox) { SetTopMost(form, false); DialogResult r = PersianMessageBox.Show(owner, "فایل" + Environment.NewLine + backupFile + Environment.NewLine + "از قبل وجود دارد" + ". " + "مایل به جایگزینی پشتیبان جدید روی فایل هستید؟", "تایید عملیات", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (r != DialogResult.Yes) { return(BackupResult.Cancel); } } try { dataAccess.Execute(System.Data.CommandType.Text, string.Format("BACKUP DATABASE [{0}] TO DISK = N'{1}' WITH NOFORMAT, INIT, NAME = N'{0}-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10", databaseName, backupFile)); } catch (Exception ex) { if (showErrorMessageBox) { SetTopMost(form, false); PersianMessageBox.Show(owner, "خطا در پشتیبان گیری از اطلاعات" + Environment.NewLine + Environment.NewLine + ex.Message); } return(BackupResult.SqlError); } return(BackupResult.Success); }
private void backgroundWorkerCopy_DoWork(object sender, DoWorkEventArgs e) { backgroundWorkerCopy.ReportProgress(0); amountOfBytesCopied = 0; byte[] buffer = new byte[bufferLenght]; if (destinationPath != null && !destinationSystemUtility.DirectoryExists(destinationPath)) { destinationSystemUtility.CreateDirectory(destinationPath); } startDateTime = DateTime.Now; for (int i = 0; i < sourceFiles.Length; i++) { if (backgroundWorkerCopy.CancellationPending) { e.Cancel = true; return; } string destinationFile; if (destinationPath != null) { destinationFile = System.IO.Path.Combine(destinationPath, System.IO.Path.GetFileName(sourceFiles[i])); } else { destinationFile = destinationFiles[i]; } if (this.overWrite || (!this.overWrite && !destinationSystemUtility.FileExists(destinationFile))) { System.IO.FileStream sourceStream = null; System.IO.FileStream destinationStream = null; try { sourceStream = sourceSystemUtility.OpenFile(sourceFiles[i]); destinationStream = destinationSystemUtility.CreateFile(destinationFile); int readCount; do { if (backgroundWorkerCopy.CancellationPending) { e.Cancel = true; if (sourceStream != null) { sourceStream.Close(); sourceStream.Dispose(); } if (destinationStream != null) { destinationStream.Close(); destinationStream.Dispose(); } try { destinationSystemUtility.DeleteFile(destinationFile); } catch { } return; } readCount = sourceStream.Read(buffer, 0, buffer.Length); destinationStream.Write(buffer, 0, readCount); amountOfBytesCopied += readCount; backgroundWorkerCopy.ReportProgress((int)(100 * amountOfBytesCopied / totalLenght), sourceFiles[i]); }while (readCount > 0); } finally { if (sourceStream != null) { sourceStream.Close(); sourceStream.Dispose(); } if (destinationStream != null) { destinationStream.Close(); destinationStream.Dispose(); } } } } backgroundWorkerCopy.ReportProgress(100); }