private FileComparisonResult CompareStreams(IFileSystemFile source, IFileSystemFile destination)
        {
            using (Stream sourceStream = source.GetStream())
            {
                using (Stream destinationStream = destination.GetStream())
                {
                    var sourceBuffer = new byte[this.BufferSize];
                    var destinationBuffer = new byte[this.BufferSize];

                    int sourceReadCount;
                    do
                    {
                        sourceReadCount = sourceStream.Read(sourceBuffer, 0, this.BufferSize);
                        int destinationReadCount = destinationStream.Read(destinationBuffer, 0, this.BufferSize);

                        if (sourceReadCount != destinationReadCount)
                        {
                            return FileComparisonResult.Differ;
                        }

                        for (int i = 0; i < sourceReadCount; i++)
                        {
                            if (sourceBuffer[i] != destinationBuffer[i])
                            {
                                return FileComparisonResult.Differ;
                            }
                        }
                    }
                    while (sourceReadCount > 0);

                    return FileComparisonResult.Same;
                }
            }
        }
        public FileComparisonResult Compare(IFileSystemFile source, IFileSystemFile destination)
        {
            if (source.Size != destination.Size)
            {
                return FileComparisonResult.Differ;
            }

            return CompareStreams(source, destination);
        }
        public string?Get(IFileSystemFile fileInfo)
        {
            if (!fileInfo.Exists)
            {
                return(null);
            }
            var extension = Path.GetExtension(fileInfo.Name);

            if (string.IsNullOrEmpty(extension) || !_mimeTypes.ContainsKey(extension))
            {
                return(null);
            }

            return(_mimeTypes[extension]);
        }
示例#4
0
        public string Get(IFileSystemFile fileInfo)
        {
            var byteBuffer = new byte[256];

            using (var fileStream = new FileStream(fileInfo.FullName, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                if (fileStream.Length >= 256)
                {
                    fileStream.Read(byteBuffer, 0, 256);
                }
                else
                {
                    fileStream.Read(byteBuffer, 0, (int)fileStream.Length);
                }
            }

            var extension = Path.GetExtension(fileInfo.Name) is null
                   ? string.Empty
                   : Path.GetExtension(fileInfo.Name).ToUpper();

            return(GetInternal(byteBuffer, extension));
        }
示例#5
0
        public string?Get(IFileSystemFile fileInfo)
        {
            if (!fileInfo.Exists)
            {
                return(null);
            }

            var byteBuffer = new byte[256];

            using (var fileStream = new FileStream(fileInfo.FullName, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                if (fileStream.Length >= 256)
                {
                    fileStream.Read(byteBuffer, 0, 256);
                }
                else
                {
                    fileStream.Read(byteBuffer, 0, (int)fileStream.Length);
                }
            }

            FindMimeFromData(0, null, byteBuffer, 256, null, 0, out var MimeTypeNum, 0);

            var mimeTypePtr      = new IntPtr(MimeTypeNum);
            var mimeTypeFromFile = Marshal.PtrToStringUni(mimeTypePtr);

            Marshal.FreeCoTaskMem(mimeTypePtr);

            if (string.IsNullOrEmpty(mimeTypeFromFile) ||
                mimeTypeFromFile == "text/plain" ||
                mimeTypeFromFile == "application/octet-stream")
            {
                return(null);
            }

            return(mimeTypeFromFile);
        }
示例#6
0
        public string?Get(IFileSystemFile fileInfo)
        {
            if (!fileInfo.Exists)
            {
                return(null);
            }

            var extension = Path.GetExtension(fileInfo.Name);

            using (var key = Registry.ClassesRoot.OpenSubKey(extension))
            {
                if (key is null)
                {
                    return(null);
                }

                if (key.GetValue("Content Type") is null)
                {
                    return(null);
                }

                return(key.GetValue("Content Type")?.ToString());
            }
        }
示例#7
0
 public FileComparisonResult Compare(IFileSystemFile source, IFileSystemFile destination)
 {
     return comparisonStrategy.Compare(source, destination);
 }