private void Created(object sender, FileSystemEventArgs e) { string pathToFile = e.FullPath; DateTime date = File.GetLastWriteTime(pathToFile); string name = Path.GetFileNameWithoutExtension(pathToFile); string extansion = Path.GetExtension(pathToFile); EncryptionOptions encryptionOptions = optionsManager.GetOptions <EncryptionOptions>() as EncryptionOptions; ArchivationOptions archivationOptions = optionsManager.GetOptions <ArchivationOptions>() as ArchivationOptions; if (extansion != ".gz" && extansion != "") { byte[] key, iv; (key, iv) = Encryption.GenKeyIv(); if (encryptionOptions.NeedToEncrypt) { File.WriteAllBytes(pathToFile, Encryption.Encrypt(pathToFile, key, iv)); } string pathToArchive = Path.Combine(source, name + ".gz"); Archivation.Compress(pathToFile, pathToArchive, archivationOptions); File.Delete(pathToFile); if (!Directory.Exists(saveArchive)) { Directory.CreateDirectory(saveArchive); } string newPathToArchive = Path.Combine(saveArchive, name + ".gz"); if (File.Exists(newPathToArchive)) { File.Delete(newPathToArchive); } File.Move(pathToArchive, newPathToArchive); string newPathToFile = Path.Combine(target, date.Year.ToString(), date.Month.ToString(), date.Day.ToString()); Directory.CreateDirectory(newPathToFile); newPathToFile = Path.Combine(newPathToFile, name + "_" + DateTime.Now.ToString("yyyy_MM_dd_hh_mm_ss") + extansion); Archivation.Decompress(newPathToArchive, newPathToFile); if (encryptionOptions.NeedToEncrypt) { File.WriteAllBytes(newPathToFile, Encryption.Decrypt(newPathToFile, key, iv)); } } }
public static void Validate(ETLOptions options) { WorkFoldersOptions workFoldersOptions = options.WorkFoldersOptions; if (!MakeValidDir(workFoldersOptions.SourceDir)) { workFoldersOptions.SourceDir = @"C:\Projects\FileWatcherService\source"; MakeValidDir(workFoldersOptions.SourceDir); Logger.Log("The access to source directory is denied, using default directory."); } if (!MakeValidDir(workFoldersOptions.TargetDir)) { workFoldersOptions.TargetDir = @"C:\Projects\FileWatcherService\target"; MakeValidDir(workFoldersOptions.TargetDir); Logger.Log("The access to target directory is denied, using default directory."); } LoggerOptions loggerOptions = options.LoggerOptions; if (!MakeValidFile(loggerOptions.LogFile)) { loggerOptions.LogFile = @"C:\Projects\FileWatcherService\log.txt"; MakeValidFile(loggerOptions.LogFile); Logger.Log("The access to log file is denied, using default log file."); } ArchivationOptions archivationOptions = options.ArchivationOptions; if (!MakeValidDir(archivationOptions.ArchiveDir)) { archivationOptions.ArchiveDir = @"C:\Projects\FileWatcherService\target\Archive"; MakeValidDir(archivationOptions.ArchiveDir); Logger.Log("The access to archive directory is denied, using default directory."); } if ((int)archivationOptions.CompressionLevel < 0 || (int)archivationOptions.CompressionLevel > 2) { archivationOptions.CompressionLevel = System.IO.Compression.CompressionLevel.Optimal; Logger.Log("Incorrect value of compression level. Default value is set."); } }
public static void Compress(string src, string arhcivePath, ArchivationOptions archivationOptions) { using (FileStream sourceStream = new FileStream(src, FileMode.OpenOrCreate)) { using (FileStream targetStream = File.Create(arhcivePath)) { using (GZipStream compressStream = new GZipStream(targetStream, archivationOptions.CompressionLevel)) { sourceStream.CopyTo(compressStream); } } } }