Beispiel #1
0
        /// <summary>
        /// Constructor
        ///
        /// Creates and opens/closes a file
        ///
        /// will throw an exception if file cannot be created
        /// </summary>
        public FileSizeManager(FileParameterStruct newParameter)
        {
            //ensure that parameters are valid.
            if (!newParameter.ValidateConstructorParameters(false, out string problem))
            {
                throw new Exception("Cannot create '" + newParameter.ToString() + "'." +
                                    (problem == "" ? "" : " The following problem occured: " + Environment.NewLine + problem));
            }

            //create directory if necessary and prepare filelist
            directoryInfo = Directory.CreateDirectory(newParameter.DirectoryPath);
            newParameter.UpdateDirectoryPath(directoryInfo.FullName);
            fileParameter = newParameter;
            fileList      = new List <FileInfoNumberStruct>();

            //Read fileinfos with file numbers into sorted fileList
            FileInfo[] fileInfos =
                directoryInfo.GetFiles(fileParameter.GetFileSearchPattern(), SearchOption.TopDirectoryOnly);

            currentFileNumber = 1;
            //TestFileName123.tst ==> 123
            //             TestFileName
            int startPos = fileParameter.FileName.Length;
            //                    .   tst
            int extensionLength = 1 + fileParameter.FileExtension.Length;

            foreach (FileInfo fileInfo in fileInfos)
            {
                string fileName = fileInfo.Name;
                if (int.TryParse(fileName.Substring(startPos, fileName.Length - startPos - extensionLength), out int fileNumber))
                {
                    fileList.Add(new FileInfoNumberStruct(fileNumber, fileInfo));

                    if (fileNumber > currentFileNumber)
                    {
                        currentFileNumber = fileNumber;
                    }
                }
            }
            fileList.Sort();

            //make sure that the correct number of files exist,
            if (fileList.Count == 0)
            {
                createNewFile();
            }
            else
            {
                enforceFileCountMax();
                currentFileInfo = fileList[fileList.Count - 1].FileInfo;
            }
        }
        //      -------

        /// <summary>
        /// Supports the changing of file name, size, etc.
        /// </summary>
        public void ChangeFileProperties(FileParameterStruct newFileParameter)
        {
            if (!newFileParameter.ValidateConstructorParameters(false, out string problem))
            {
                throw new Exception("LogFileWriter.ChangeProperties(): Invalide parameters '" + newFileParameter.ToString() + "'." +
                                    (problem == null ? "" : " The following problem occured: " + Environment.NewLine + problem));
            }
            this.newFileParameter = newFileParameter;
            isNewFileParameter    = true;
        }