public static MagicNumberMapping GetAllMappings()
        {
            var magicNumberMapping = new MagicNumberMapping();

            foreach (var magicNumber in ImageMagicNumbers.BMPMagicNumbers)
            {
                magicNumberMapping.AddMagicNumber(magicNumber, ImageMagicNumbers.BMP);
            }

            foreach (var magicNumber in ImageMagicNumbers.GIFMagicNumbers)
            {
                magicNumberMapping.AddMagicNumber(magicNumber, ImageMagicNumbers.GIF);
            }

            foreach (var magicNumber in ImageMagicNumbers.JPEGMagicNumbers)
            {
                magicNumberMapping.AddMagicNumber(magicNumber, ImageMagicNumbers.JPEG);
            }

            foreach (var magicNumber in ImageMagicNumbers.PNGMagicNumbers)
            {
                magicNumberMapping.AddMagicNumber(magicNumber, ImageMagicNumbers.PNG);
            }

            foreach (var magicNumber in DocumentMagicNumbers.PDFMagicNumbers)
            {
                magicNumberMapping.AddMagicNumber(magicNumber, DocumentMagicNumbers.PDF);
            }

            return(magicNumberMapping);
        }
        public static MagicNumberMapping CreateMappingWithSingleMagicNumber(byte?[] magicNumber, string fileType)
        {
            var fileMagicNumberMapping = new MagicNumberMapping();

            fileMagicNumberMapping.AddMagicNumber(magicNumber, fileType);
            return(fileMagicNumberMapping);
        }
예제 #3
0
        private static void Main(string[] args)
        {
            /***
             *    This simple console application contains an example of how the file type identifier is used.
             *    A file magic number mapping is instantiated and configured to contain the magic numbers for a PDF file.
             *    A file type identifier is instantiated with this mapping, enabling it to recognize PDF files.
             *
             *    The input loop asks the user for a file path and, using the file type identifier, tells the user
             *    whether the provided file was a PDF or not.
             */

            // Instantiate a mapping of the file magic numbers that should be recognized
            var fileMagicNumberMapping = new MagicNumberMapping();

            // Add the file magic numbers for the PDF file type
            fileMagicNumberMapping.AddMagicNumbers(DocumentMagicNumbers.PDFMagicNumbers, DocumentMagicNumbers.PDF);
            // If more types of files should be recognized, they can be added to the file magic number mapping here

            // Instantiate a new file type identifier with the configure file magic number mapping
            var fileTypeIdentifier = new FileTypeIdentifier(fileMagicNumberMapping);

            while (true)
            {
                Console.WriteLine("Input the path to a file that should be identified: ");
                var inputFilePath = Console.ReadLine();

                if (string.IsNullOrWhiteSpace(inputFilePath))
                {
                    Console.WriteLine("No input was provided...");
                    continue;
                }

                if (!File.Exists(inputFilePath))
                {
                    Console.WriteLine($"File at path '{inputFilePath}' does not exist!");
                    continue;
                }

                string identifiedFileType = null;

                // Open a read Stream for the provided file
                using (var fileStream = File.OpenRead(inputFilePath))
                {
                    identifiedFileType = fileTypeIdentifier.GetFileType(fileStream);
                }

                // Now, if the provided file is a PDF, it will be recognized by the file type identifier!
                if (identifiedFileType != null)
                {
                    Console.WriteLine($"File type recognized! The type of this file is '{identifiedFileType}'");
                }
                // If the file is not a PDF, the type is unknown to the identifier
                else
                {
                    Console.WriteLine("The file type identifier was not configured to recognize this type of file!");
                }
            }
        }
        public void GetLongestMagicNumber_NoMagicNumberDefined_Negative()
        {
            // Arrange
            var magicNumber = new MagicNumberMapping();

            // Act
            Action act = () => magicNumber.GetLongestMagicNumber();

            // Assert
            act.Should().Throw <InvalidConfigurationException>("there are no magic numbers defined at all, hence no longest number");
        }
        public void AddMagicNumber_ArgumentException_Tests(byte?[] magicNumber, string fileType)
        {
            // Arrange
            var magicNumberMapping = new MagicNumberMapping();

            magicNumberMapping.FileMagicNumberMappingTable.Should().BeEmpty("there should not be any existing mappings");

            // Act
            Action act = () => magicNumberMapping.AddMagicNumber(magicNumber, fileType);

            // Assert
            act.Should().Throw <ArgumentException>("the input is bad and should provoke an exception");
        }
        public void AddMagicNumbers_Positive()
        {
            // Arrange
            var magicNumbers = new[] { new byte?[] { 1, null, 3 }, new byte?[] { 1, null, 4 } };
            var fileType     = "test";

            // Act
            var magicNumberMapping = new MagicNumberMapping();

            magicNumberMapping.AddMagicNumbers(magicNumbers, fileType);

            // Assert
            magicNumberMapping.FileMagicNumberMappingTable.Should().HaveCount(2, "two mappings should have been added");
        }
        public void AddMagicNumber_Positive()
        {
            // Arrange
            var magicNumber = ValidMagicNumber;
            var fileType    = "test";

            // Act
            var magicNumberMapping = new MagicNumberMapping();

            magicNumberMapping.AddMagicNumber(magicNumber, fileType);

            // Assert
            magicNumberMapping.FileMagicNumberMappingTable.Should().HaveCount(1, "a mapping should have been added");
        }
        public void GetLongestMagicNumber_Positive()
        {
            // Arrange
            var longestMagicNumberToAdd = 10;
            var fileMagicNumberMapping  = new MagicNumberMapping();

            for (var i = 1; i <= longestMagicNumberToAdd; i++)
            {
                var magicNumber = Enumerable.Repeat(new byte?(1), i).ToArray();
                var type        = i.ToString();
                fileMagicNumberMapping.AddMagicNumber(magicNumber, type);
            }

            // Act
            var longestMagicNumber = fileMagicNumberMapping.GetLongestMagicNumber();

            // Assert
            longestMagicNumber.Should().Be(longestMagicNumberToAdd);
        }