Esempio n. 1
0
        /// <summary>
        /// <para>
        /// Archives the <paramref name="fileName"/> using a date and sequence style numbering. Archives will be stamped
        /// with the prior period (Year, Month, Day) datetime. The most recent archive has the highest number (in
        /// combination with the date).
        /// </para>
        /// <para>
        /// When the number of archive files exceed <see cref="P:MaxArchiveFiles"/> the obsolete archives are deleted.
        /// </para>
        /// </summary>
        /// <param name="fileName">File name to be archived.</param>
        /// <param name="pattern">File name template which contains the numeric pattern to be replaced.</param>
        /// <param name="logEvent">Log event that the <see cref="FileTarget"/> instance is currently processing.</param>
        private void ArchiveByDateAndSequence(string fileName, string pattern, LogEventInfo logEvent)
        {
            string baseNamePattern = Path.GetFileName(pattern);

            if (string.IsNullOrEmpty(baseNamePattern))
            {
                return;
            }

            FileNameTemplate fileTemplate = new FileNameTemplate(baseNamePattern);
            string fileNameMask = fileTemplate.ReplacePattern("*");
            string dateFormat = GetArchiveDateFormatString(this.ArchiveDateFormat);

            string dirName = Path.GetDirectoryName(Path.GetFullPath(pattern));
            if (string.IsNullOrEmpty(dirName))
            {
                return;
            }

            int minSequenceLength = fileTemplate.EndAt - fileTemplate.BeginAt - 2;
            int nextSequenceNumber;
            DateTime archiveDate = GetArchiveDate(fileName, logEvent);
            List<string> archiveFileNames;
            if (Directory.Exists(dirName))
            {
                List<DateAndSequenceArchive> archives = FindDateAndSequenceArchives(dirName, fileName, fileNameMask, minSequenceLength, dateFormat, fileTemplate)
                    .ToList();

                // Find out the next sequence number among existing archives having the same date part as the current date.
                int? lastSequenceNumber = archives
                    .Where(a => a.HasSameFormattedDate(archiveDate))
                    .Max(a => (int?)a.Sequence);
                nextSequenceNumber = (int)(lastSequenceNumber != null ? lastSequenceNumber + 1 : 0);

                archiveFileNames = archives
                    .OrderBy(a => a.Date)
                    .ThenBy(a => a.Sequence)
                    .Select(a => a.FileName)
                    .ToList();
            }
            else
            {
                Directory.CreateDirectory(dirName);
                nextSequenceNumber = 0;
                archiveFileNames = new List<string>();
            }

            string paddedSequence = nextSequenceNumber.ToString().PadLeft(minSequenceLength, '0');
            string archiveFileNameWithoutPath = fileNameMask.Replace("*",
                string.Format("{0}.{1}", archiveDate.ToString(dateFormat), paddedSequence));
            string archiveFileName = Path.Combine(dirName, archiveFileNameWithoutPath);

            RollArchiveForward(fileName, archiveFileName, allowCompress: true);
            archiveFileNames.Add(archiveFileName);
            EnsureArchiveCount(archiveFileNames);
        }
        protected override DateAndSequenceArchive GenerateArchiveFileInfo(FileInfo archiveFile, FileNameTemplate fileTemplate)
        {
            //Get the archive file name or empty string if it's null
            string archiveFileNameWithoutPath = Path.GetFileName(archiveFile.FullName) ?? string.Empty;

            if (!TryParseDateAndSequence(archiveFileNameWithoutPath, _archiveDateFormat, fileTemplate, out var date, out var sequence))
            {
                return(null);
            }

            date = DateTime.SpecifyKind(date, NLog.Time.TimeSource.Current.Time.Kind);
            return(new DateAndSequenceArchive(archiveFile.FullName, date, _archiveDateFormat, sequence));
        }
Esempio n. 3
0
        /// <summary>
        /// Archives the <paramref name="fileName"/> using a sequence style numbering. The most recent archive has the
        /// highest number. When the number of archive files exceed <see cref="P:MaxArchiveFiles"/> the obsolete
        /// archives are deleted.
        /// </summary>
        /// <param name="fileName">File name to be archived.</param>
        /// <param name="pattern">File name template which contains the numeric pattern to be replaced.</param>
        private void ArchiveBySequence(string fileName, string pattern)
        {
            FileNameTemplate fileTemplate = new FileNameTemplate(Path.GetFileName(pattern));
            int trailerLength = fileTemplate.Template.Length - fileTemplate.EndAt;
            string fileNameMask = fileTemplate.ReplacePattern("*");

            string dirName = Path.GetDirectoryName(Path.GetFullPath(pattern));
            int nextNumber = -1;
            int minNumber = -1;

            var number2Name = new Dictionary<int, string>();

            try
            {
#if SILVERLIGHT && !WINDOWS_PHONE
                foreach (string s in Directory.EnumerateFiles(dirName, fileNameMask))
#else
                foreach (string s in Directory.GetFiles(dirName, fileNameMask))
#endif
                {
                    string baseName = Path.GetFileName(s);
                    string number = baseName.Substring(fileTemplate.BeginAt, baseName.Length - trailerLength - fileTemplate.BeginAt);
                    int num;

                    try
                    {
                        num = Convert.ToInt32(number, CultureInfo.InvariantCulture);
                    }
                    catch (FormatException)
                    {
                        continue;
                    }

                    nextNumber = Math.Max(nextNumber, num);
                    minNumber = minNumber != -1 ? Math.Min(minNumber, num) : num;

                    number2Name[num] = s;
                }

                nextNumber++;
            }
            catch (DirectoryNotFoundException)
            {
                Directory.CreateDirectory(dirName);
                nextNumber = 0;
            }

            if (minNumber != -1 && ShouldDeleteOldArchives())
            {
                int minNumberToKeep = nextNumber - this.MaxArchiveFiles + 1;
                for (int i = minNumber; i < minNumberToKeep; ++i)
                {
                    string s;

                    if (number2Name.TryGetValue(i, out s))
                    {
                        InternalLogger.Info("Deleting old archive {0}", s);
                        File.Delete(s);
                    }
                }
            }

            string newFileName = ReplaceNumberPattern(pattern, nextNumber);
            RollArchiveForward(fileName, newFileName, allowCompress: true);
        }
Esempio n. 4
0
        protected override DateAndSequenceArchive GenerateArchiveFileInfo(FileInfo archiveFile, FileNameTemplate fileTemplate)
        {
            string baseName      = Path.GetFileName(archiveFile.FullName) ?? "";
            int    trailerLength = fileTemplate.Template.Length - fileTemplate.EndAt;
            string number        = baseName.Substring(fileTemplate.BeginAt, baseName.Length - trailerLength - fileTemplate.BeginAt);
            int    num;

            try
            {
                num = Convert.ToInt32(number, CultureInfo.InvariantCulture);
            }
            catch (FormatException)
            {
                return(null);
            }

            return(new DateAndSequenceArchive(archiveFile.FullName, DateTime.MinValue, string.Empty, num));
        }
        /// <summary>
        /// Parse filename with date and sequence pattern
        /// </summary>
        /// <param name="archiveFileNameWithoutPath"></param>
        /// <param name="dateFormat">dateformat for archive</param>
        /// <param name="fileTemplate"></param>
        /// <param name="date">the found pattern. When failed, then default</param>
        /// <param name="sequence">the found pattern. When failed, then default</param>
        /// <returns></returns>
        private static bool TryParseDateAndSequence(string archiveFileNameWithoutPath, string dateFormat, FileNameTemplate fileTemplate, out DateTime date, out int sequence)
        {
            int trailerLength         = fileTemplate.Template.Length - fileTemplate.EndAt;
            int dateAndSequenceIndex  = fileTemplate.BeginAt;
            int dateAndSequenceLength = archiveFileNameWithoutPath.Length - trailerLength - dateAndSequenceIndex;

            if (dateAndSequenceLength < 0)
            {
                date     = default(DateTime);
                sequence = 0;
                return(false);
            }
            string dateAndSequence = archiveFileNameWithoutPath.Substring(dateAndSequenceIndex, dateAndSequenceLength);
            int    sequenceIndex   = dateAndSequence.LastIndexOf('.') + 1;

            string sequencePart = dateAndSequence.Substring(sequenceIndex);

            if (!int.TryParse(sequencePart, NumberStyles.None, CultureInfo.CurrentCulture, out sequence))
            {
                date = default(DateTime);
                return(false);
            }

            var dateAndSequenceLength2 = dateAndSequence.Length - sequencePart.Length - 1;

            if (dateAndSequenceLength2 < 0)
            {
                date = default(DateTime);
                return(false);
            }

            string datePart = dateAndSequence.Substring(0, dateAndSequenceLength2);

            if (!DateTime.TryParseExact(datePart, dateFormat, CultureInfo.CurrentCulture, DateTimeStyles.None,
                                        out date))
            {
                return(false);
            }
            InternalLogger.Trace("FileTarget: parsed date '{0}' from file-template '{1}'", datePart, fileTemplate?.Template);
            return(true);
        }
Esempio n. 6
0
        public override bool Equals(object o)
        {
            if (!(o is ConversionProfile))
            {
                return(false);
            }
            var v = o as ConversionProfile;

            if (!AttachmentPage.Equals(v.AttachmentPage))
            {
                return(false);
            }
            if (!AutoSave.Equals(v.AutoSave))
            {
                return(false);
            }
            if (!BackgroundPage.Equals(v.BackgroundPage))
            {
                return(false);
            }
            if (!CoverPage.Equals(v.CoverPage))
            {
                return(false);
            }
            if (!EmailClient.Equals(v.EmailClient))
            {
                return(false);
            }
            if (!EmailSmtp.Equals(v.EmailSmtp))
            {
                return(false);
            }
            if (!Ftp.Equals(v.Ftp))
            {
                return(false);
            }
            if (!Ghostscript.Equals(v.Ghostscript))
            {
                return(false);
            }
            if (!JpegSettings.Equals(v.JpegSettings))
            {
                return(false);
            }
            if (!PdfSettings.Equals(v.PdfSettings))
            {
                return(false);
            }
            if (!PngSettings.Equals(v.PngSettings))
            {
                return(false);
            }
            if (!Printing.Equals(v.Printing))
            {
                return(false);
            }
            if (!Properties.Equals(v.Properties))
            {
                return(false);
            }
            if (!SaveDialog.Equals(v.SaveDialog))
            {
                return(false);
            }
            if (!Scripting.Equals(v.Scripting))
            {
                return(false);
            }
            if (!Stamping.Equals(v.Stamping))
            {
                return(false);
            }
            if (!TiffSettings.Equals(v.TiffSettings))
            {
                return(false);
            }
            if (!AuthorTemplate.Equals(v.AuthorTemplate))
            {
                return(false);
            }
            if (!FileNameTemplate.Equals(v.FileNameTemplate))
            {
                return(false);
            }
            if (!Guid.Equals(v.Guid))
            {
                return(false);
            }
            if (!Name.Equals(v.Name))
            {
                return(false);
            }
            if (!OpenViewer.Equals(v.OpenViewer))
            {
                return(false);
            }
            if (!OutputFormat.Equals(v.OutputFormat))
            {
                return(false);
            }
            if (!ShowProgress.Equals(v.ShowProgress))
            {
                return(false);
            }
            if (!SkipPrintDialog.Equals(v.SkipPrintDialog))
            {
                return(false);
            }
            if (!TitleTemplate.Equals(v.TitleTemplate))
            {
                return(false);
            }

            return(true);
        }
        protected override DateAndSequenceArchive GenerateArchiveFileInfo(FileInfo archiveFile, FileNameTemplate fileTemplate)
        {
            if (fileTemplate?.EndAt > 0)
            {
                string filename    = archiveFile.Name;
                int    templatePos = 0;
                for (int i = 0; i < filename.Length; ++i)
                {
                    char fileNameChar = filename[i];

                    if (templatePos >= fileTemplate.Template.Length)
                    {
                        if (char.IsLetter(fileNameChar))
                        {
                            return(null);    // reached end of template, but still letters
                        }
                        break;
                    }

                    char templateChar;
                    if (templatePos < fileTemplate.EndAt && i >= fileTemplate.BeginAt)
                    {
                        // Inside wildcard, skip validation of non-letters
                        if (char.IsLetter(fileNameChar))
                        {
                            templatePos = fileTemplate.EndAt;
                            do
                            {
                                if (templatePos >= fileTemplate.Template.Length)
                                {
                                    return(null);    // reached end of template, but still letters
                                }
                                templateChar = fileTemplate.Template[templatePos];
                                ++templatePos;
                            } while (!char.IsLetter(templateChar));
                        }
                        else
                        {
                            continue;
                        }
                    }
                    else
                    {
                        templateChar = fileTemplate.Template[templatePos];
                        ++templatePos;
                    }

                    if (fileNameChar == templateChar || char.ToLowerInvariant(fileNameChar) == char.ToLowerInvariant(templateChar))
                    {
                        continue;
                    }

                    if (templateChar == '*' && !char.IsLetter(fileNameChar))
                    {
                        break;  // Reached archive-seq-no, lets call it a day
                    }

                    return(null); // filename is not matching file-template
                }
            }

            int sequenceNumber  = ExtractArchiveNumberFromFileName(archiveFile.FullName);
            var creationTimeUtc = archiveFile.LookupValidFileCreationTimeUtc();
            var creationTime    = creationTimeUtc > DateTime.MinValue ? NLog.Time.TimeSource.Current.FromSystemTime(creationTimeUtc) : DateTime.MinValue;

            return(new DateAndSequenceArchive(archiveFile.FullName, creationTime, _archiveDateFormat, sequenceNumber > 0 ? sequenceNumber : 0));
        }
Esempio n. 8
0
        protected override DateAndSequenceArchive GenerateArchiveFileInfo(FileInfo archiveFile, FileNameTemplate fileTemplate)
        {
            string archiveFileName = Path.GetFileName(archiveFile.FullName) ?? "";
            string fileNameMask    = fileTemplate.ReplacePattern("*");
            int    lastIndexOfStar = fileNameMask.LastIndexOf('*');

            if (lastIndexOfStar + _archiveDateFormat.Length <= archiveFileName.Length)
            {
                string   datePart = archiveFileName.Substring(lastIndexOfStar, _archiveDateFormat.Length);
                DateTime fileDate;
                if (DateTime.TryParseExact(datePart, _archiveDateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out fileDate))
                {
                    fileDate = DateTime.SpecifyKind(fileDate, NLog.Time.TimeSource.Current.Time.Kind);
                    return(new DateAndSequenceArchive(archiveFile.FullName, fileDate, _archiveDateFormat, -1));
                }
            }

            return(null);
        }
        protected override DateAndSequenceArchive GenerateArchiveFileInfo(FileInfo archiveFile, FileNameTemplate fileTemplate)
        {
            //Get the archive file name or empty string if it's null
            string archiveFileNameWithoutPath = Path.GetFileName(archiveFile.FullName) ?? "";

            DateTime date;
            int      sequence;

            if (
                !TryParseDateAndSequence(archiveFileNameWithoutPath, _archiveDateFormat, fileTemplate, out date,
                                         out sequence))
            {
                return(null);
            }

            return(new DateAndSequenceArchive(archiveFile.FullName, date, _archiveDateFormat, sequence));
        }
Esempio n. 10
0
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendLine("[AttachmentPage]");
            sb.AppendLine(AttachmentPage.ToString());
            sb.AppendLine("[AutoSave]");
            sb.AppendLine(AutoSave.ToString());
            sb.AppendLine("[BackgroundPage]");
            sb.AppendLine(BackgroundPage.ToString());
            sb.AppendLine("[CoverPage]");
            sb.AppendLine(CoverPage.ToString());
            sb.AppendLine("[DropboxSettings]");
            sb.AppendLine(DropboxSettings.ToString());
            sb.AppendLine("[EmailClientSettings]");
            sb.AppendLine(EmailClientSettings.ToString());
            sb.AppendLine("[EmailSmtpSettings]");
            sb.AppendLine(EmailSmtpSettings.ToString());
            sb.AppendLine("[Ftp]");
            sb.AppendLine(Ftp.ToString());
            sb.AppendLine("[Ghostscript]");
            sb.AppendLine(Ghostscript.ToString());
            sb.AppendLine("[HttpSettings]");
            sb.AppendLine(HttpSettings.ToString());
            sb.AppendLine("[JpegSettings]");
            sb.AppendLine(JpegSettings.ToString());
            sb.AppendLine("[PdfSettings]");
            sb.AppendLine(PdfSettings.ToString());
            sb.AppendLine("[PngSettings]");
            sb.AppendLine(PngSettings.ToString());
            sb.AppendLine("[Printing]");
            sb.AppendLine(Printing.ToString());
            sb.AppendLine("[Properties]");
            sb.AppendLine(Properties.ToString());
            sb.AppendLine("[Scripting]");
            sb.AppendLine(Scripting.ToString());
            sb.AppendLine("[Stamping]");
            sb.AppendLine(Stamping.ToString());
            sb.AppendLine("[TextSettings]");
            sb.AppendLine(TextSettings.ToString());
            sb.AppendLine("[TiffSettings]");
            sb.AppendLine(TiffSettings.ToString());
            sb.AppendLine("[UserTokens]");
            sb.AppendLine(UserTokens.ToString());
            sb.AppendLine("AuthorTemplate=" + AuthorTemplate.ToString());
            sb.AppendLine("FileNameTemplate=" + FileNameTemplate.ToString());
            sb.AppendLine("Guid=" + Guid.ToString());
            sb.AppendLine("KeywordTemplate=" + KeywordTemplate.ToString());
            sb.AppendLine("Name=" + Name.ToString());
            sb.AppendLine("OpenViewer=" + OpenViewer.ToString());
            sb.AppendLine("OpenWithPdfArchitect=" + OpenWithPdfArchitect.ToString());
            sb.AppendLine("OutputFormat=" + OutputFormat.ToString());
            sb.AppendLine("ShowAllNotifications=" + ShowAllNotifications.ToString());
            sb.AppendLine("ShowOnlyErrorNotifications=" + ShowOnlyErrorNotifications.ToString());
            sb.AppendLine("ShowProgress=" + ShowProgress.ToString());
            sb.AppendLine("ShowQuickActions=" + ShowQuickActions.ToString());
            sb.AppendLine("SkipPrintDialog=" + SkipPrintDialog.ToString());
            sb.AppendLine("SubjectTemplate=" + SubjectTemplate.ToString());
            sb.AppendLine("TargetDirectory=" + TargetDirectory.ToString());
            sb.AppendLine("TitleTemplate=" + TitleTemplate.ToString());

            return(sb.ToString());
        }
        protected override DateAndSequenceArchive GenerateArchiveFileInfo(FileInfo archiveFile, FileNameTemplate fileTemplate)
        {
            int sequenceNumber  = ExtractArchiveNumberFromFileName(archiveFile.FullName);
            var creationTimeUtc = FileCharacteristicsHelper.ValidateFileCreationTime(archiveFile, (f) => f.GetCreationTimeUtc(), (f) => f.GetLastWriteTimeUtc()).Value;

            return(new DateAndSequenceArchive(archiveFile.FullName, creationTimeUtc, string.Empty, sequenceNumber > 0 ? sequenceNumber : 0));
        }
Esempio n. 12
0
        public override bool Equals(object o)
        {
            if (!(o is ConversionProfile))
            {
                return(false);
            }
            ConversionProfile v = o as ConversionProfile;

            if (!AttachmentPage.Equals(v.AttachmentPage))
            {
                return(false);
            }
            if (!AutoSave.Equals(v.AutoSave))
            {
                return(false);
            }
            if (!BackgroundPage.Equals(v.BackgroundPage))
            {
                return(false);
            }
            if (!CoverPage.Equals(v.CoverPage))
            {
                return(false);
            }
            if (!DropboxSettings.Equals(v.DropboxSettings))
            {
                return(false);
            }
            if (!EmailClientSettings.Equals(v.EmailClientSettings))
            {
                return(false);
            }
            if (!EmailSmtpSettings.Equals(v.EmailSmtpSettings))
            {
                return(false);
            }
            if (!Ftp.Equals(v.Ftp))
            {
                return(false);
            }
            if (!Ghostscript.Equals(v.Ghostscript))
            {
                return(false);
            }
            if (!HttpSettings.Equals(v.HttpSettings))
            {
                return(false);
            }
            if (!JpegSettings.Equals(v.JpegSettings))
            {
                return(false);
            }
            if (!PdfSettings.Equals(v.PdfSettings))
            {
                return(false);
            }
            if (!PngSettings.Equals(v.PngSettings))
            {
                return(false);
            }
            if (!Printing.Equals(v.Printing))
            {
                return(false);
            }
            if (!Properties.Equals(v.Properties))
            {
                return(false);
            }
            if (!Scripting.Equals(v.Scripting))
            {
                return(false);
            }
            if (!Stamping.Equals(v.Stamping))
            {
                return(false);
            }
            if (!TextSettings.Equals(v.TextSettings))
            {
                return(false);
            }
            if (!TiffSettings.Equals(v.TiffSettings))
            {
                return(false);
            }
            if (!UserTokens.Equals(v.UserTokens))
            {
                return(false);
            }
            if (!AuthorTemplate.Equals(v.AuthorTemplate))
            {
                return(false);
            }
            if (!FileNameTemplate.Equals(v.FileNameTemplate))
            {
                return(false);
            }
            if (!Guid.Equals(v.Guid))
            {
                return(false);
            }
            if (!KeywordTemplate.Equals(v.KeywordTemplate))
            {
                return(false);
            }
            if (!Name.Equals(v.Name))
            {
                return(false);
            }
            if (!OpenViewer.Equals(v.OpenViewer))
            {
                return(false);
            }
            if (!OpenWithPdfArchitect.Equals(v.OpenWithPdfArchitect))
            {
                return(false);
            }
            if (!OutputFormat.Equals(v.OutputFormat))
            {
                return(false);
            }
            if (!ShowAllNotifications.Equals(v.ShowAllNotifications))
            {
                return(false);
            }
            if (!ShowOnlyErrorNotifications.Equals(v.ShowOnlyErrorNotifications))
            {
                return(false);
            }
            if (!ShowProgress.Equals(v.ShowProgress))
            {
                return(false);
            }
            if (!ShowQuickActions.Equals(v.ShowQuickActions))
            {
                return(false);
            }
            if (!SkipPrintDialog.Equals(v.SkipPrintDialog))
            {
                return(false);
            }
            if (!SubjectTemplate.Equals(v.SubjectTemplate))
            {
                return(false);
            }
            if (!TargetDirectory.Equals(v.TargetDirectory))
            {
                return(false);
            }
            if (!TitleTemplate.Equals(v.TitleTemplate))
            {
                return(false);
            }

            return(true);
        }
 protected abstract DateAndSequenceArchive GenerateArchiveFileInfo(FileInfo archiveFile, FileNameTemplate fileTemplate);
Esempio n. 14
0
        async Task OnExecuteAsync()
        {
            OutputPath = Path.GetFullPath(OutputPath);

            if (File.Exists(OutputPath))
            {
                throw new Exception("O caminho onde os arquivos aleatórios serão gravados precisa ser um diretório");
            }

            if (string.IsNullOrWhiteSpace(FileNameTemplate))
            {
                throw new Exception("Você precisa informar um template válido para nome do arquivo");
            }

            FileNameTemplate = FileNameTemplate.Replace("{n}", "{0}");

            if (!Directory.Exists(OutputPath))
            {
                Directory.CreateDirectory(OutputPath);
            }

            if (FileCount < 1)
            {
                throw new Exception("Você precisa informar pelo menos 1 arquivo para gerar");
            }

            if (string.IsNullOrWhiteSpace(MinFileSize))
            {
                throw new Exception("Você precisa informar o parâmetro --min-file-size");
            }

            if (string.IsNullOrWhiteSpace(MaxFileSize))
            {
                throw new Exception("Você precisa informar o parâmetro --max-file-size");
            }

            var minFileSize = ParseHumanSize(MinFileSize);
            var maxFileSize = ParseHumanSize(MaxFileSize);

            if (minFileSize < 1)
            {
                throw new Exception("O tamanho mínimo do arquivo aleatório precisa ser de pelo menos 1 byte");
            }

            if (maxFileSize < minFileSize)
            {
                throw new Exception("O tamanho máximo do arquivo aleatório precisa ser pelo menos o mesmo tamanho mínimo");
            }

            var currentFile             = 1;
            var fileCountCharactersSize = FileCount.ToString().Length;
            var rnd = new Random();

            while (currentFile <= FileCount)
            {
                var fileNumber = (currentFile++).ToString().PadLeft(fileCountCharactersSize, '0');
                var fileName   = string.Format(FileNameTemplate, fileNumber);
                var filePath   = Path.Combine(OutputPath, fileName);
                var fileSize   = rnd.Next(minFileSize, maxFileSize);

                Console.WriteLine("Gerando arquivo {0} com {1}...", fileName, FormatHumanSize(fileSize));

                var fileBytes = new Byte[fileSize];

                rnd.NextBytes(fileBytes);

                using (var stream = new FileStream(filePath, FileMode.Create))
                    await stream.WriteAsync(fileBytes, 0, fileSize);
            }
        }
Esempio n. 15
0
        /// <summary>
        /// Searches a given directory for archives that comply with the current archive pattern.
        /// </summary>
        /// <returns>An enumeration of archive infos, ordered by their file creation date.</returns>
        private IEnumerable<DateAndSequenceArchive> FindDateAndSequenceArchives(string dirName, string logFileName,
            string fileNameMask,
            int minSequenceLength, string dateFormat, FileNameTemplate fileTemplate)
        {
            var directoryInfo = new DirectoryInfo(dirName);

            int archiveFileNameMinLength = fileNameMask.Length + minSequenceLength;
            var archiveFileNames = GetFiles(directoryInfo, fileNameMask)
                .Where(n => n.Name.Length >= archiveFileNameMinLength)
                .OrderBy(n => n.CreationTime)
                .Select(n => n.FullName);

            foreach (string archiveFileName in archiveFileNames)
            {
                //Get the archive file name or empty string if it's null
                string archiveFileNameWithoutPath = Path.GetFileName(archiveFileName) ?? "";

                DateTime date;
                int sequence;
                if (
                    !TryParseDateAndSequence(archiveFileNameWithoutPath, dateFormat, fileTemplate, out date,
                        out sequence))
                {
                    continue;
                }

                //It's possible that the log file itself has a name that will match the archive file mask.
                if (string.IsNullOrEmpty(archiveFileNameWithoutPath) ||
                    archiveFileNameWithoutPath.Equals(Path.GetFileName(logFileName)))
                {
                    continue;
                }

                yield return new DateAndSequenceArchive(archiveFileName, date, dateFormat, sequence);
            }
        }
Esempio n. 16
0
        protected override DateAndSequenceArchive GenerateArchiveFileInfo(FileInfo archiveFile, FileNameTemplate fileTemplate)
        {
            if (fileTemplate?.EndAt > 0)
            {
                string filename    = archiveFile.Name;
                int    templatePos = 0;
                for (int i = 0; i < filename.Length; ++i)
                {
                    char fileNameChar = filename[i];

                    if (templatePos >= fileTemplate.Template.Length)
                    {
                        if (char.IsLetter(fileNameChar))
                        {
                            return(null);    // reached end of template, but still letters
                        }
                        break;
                    }

                    char templateChar;
                    if (templatePos < fileTemplate.EndAt && i >= fileTemplate.BeginAt)
                    {
                        // Inside wildcard, skip validation of non-letters
                        if (char.IsLetter(fileNameChar))
                        {
                            templatePos = fileTemplate.EndAt;
                            do
                            {
                                if (templatePos >= fileTemplate.Template.Length)
                                {
                                    return(null);    // reached end of template, but still letters
                                }
                                templateChar = fileTemplate.Template[templatePos];
                                ++templatePos;
                            } while (!char.IsLetter(templateChar));
                        }
                        else
                        {
                            continue;
                        }
                    }
                    else
                    {
                        templateChar = fileTemplate.Template[templatePos];
                        ++templatePos;
                    }

                    if (fileNameChar == templateChar || char.ToLowerInvariant(fileNameChar) == char.ToLowerInvariant(templateChar))
                    {
                        continue;
                    }

                    if (templateChar == '*' && !char.IsLetter(fileNameChar))
                    {
                        break;  // Reached archive-seq-no, lets call it a day
                    }

                    return(null); // filename is not matching file-template
                }
            }

            int sequenceNumber = ExtractArchiveNumberFromFileName(archiveFile.FullName);

            InternalLogger.Trace("FileTarget: extracted sequenceNumber: {0} from file '{1}'", sequenceNumber, archiveFile.FullName);
            var creationTimeUtc = FileCharacteristicsHelper.ValidateFileCreationTime(archiveFile, (f) => f.GetCreationTimeUtc(), (f) => f.GetLastWriteTimeUtc()).Value;

            return(new DateAndSequenceArchive(archiveFile.FullName, creationTimeUtc, string.Empty, sequenceNumber > 0 ? sequenceNumber : 0));
        }
Esempio n. 17
0
        private static bool TryParseDateAndSequence(string archiveFileNameWithoutPath, string dateFormat, FileNameTemplate fileTemplate, out DateTime date, out int sequence)
        {
            int trailerLength = fileTemplate.Template.Length - fileTemplate.EndAt;
            int dateAndSequenceIndex = fileTemplate.BeginAt;
            int dateAndSequenceLength = archiveFileNameWithoutPath.Length - trailerLength - dateAndSequenceIndex;

            string dateAndSequence = archiveFileNameWithoutPath.Substring(dateAndSequenceIndex, dateAndSequenceLength);
            int sequenceIndex = dateAndSequence.LastIndexOf('.') + 1;

            string sequencePart = dateAndSequence.Substring(sequenceIndex);
            if (!Int32.TryParse(sequencePart, NumberStyles.None, CultureInfo.CurrentCulture, out sequence))
            {
                date = default(DateTime);
                return false;
            }

            string datePart = dateAndSequence.Substring(0, dateAndSequence.Length - sequencePart.Length - 1);
            if (!DateTime.TryParseExact(datePart, dateFormat, CultureInfo.CurrentCulture, DateTimeStyles.None,
                out date))
            {
                return false;
            }

            return true;
        }
Esempio n. 18
0
        protected override DateAndSequenceArchive GenerateArchiveFileInfo(FileInfo archiveFile, FileNameTemplate fileTemplate)
        {
            string baseName      = Path.GetFileName(archiveFile.FullName) ?? "";
            int    trailerLength = fileTemplate.Template.Length - fileTemplate.EndAt;
            string number        = baseName.Substring(fileTemplate.BeginAt, baseName.Length - trailerLength - fileTemplate.BeginAt);
            int    num;

            try
            {
                num = Convert.ToInt32(number, CultureInfo.InvariantCulture);
            }
            catch (FormatException)
            {
                return(null);
            }

            var creationTimeUtc = archiveFile.LookupValidFileCreationTimeUtc();
            var creationTime    = creationTimeUtc > DateTime.MinValue ? NLog.Time.TimeSource.Current.FromSystemTime(creationTimeUtc) : DateTime.MinValue;

            return(new DateAndSequenceArchive(archiveFile.FullName, creationTime, string.Empty, num));
        }