Ejemplo n.º 1
0
        private static void TryFix(EncodingScrutatorFolder encodingScrutatorFolder)
        {
            Console.WriteLine($"存在不符合规范文件:  {IllicitFile.Count}\r\n");
            var sitpulationEncoding     = encodingScrutatorFolder.SitpulationEncodingSetting.SitpulationEncoding;
            var SitpulationEncodingName = sitpulationEncoding.EncodingName;

            Console.WriteLine($"开始尝试自动修复格式,输出格式为 {SitpulationEncodingName}");

            foreach (var encodingScrutatorFile in IllicitFile)
            {
                Console.WriteLine(
                    $"开始修复 {encodingScrutatorFile.Name} 从 {encodingScrutatorFile.Encoding.EncodingName} 到 {SitpulationEncodingName} 可信度{encodingScrutatorFile.ConfidenceCount:0.00}");

                using (var fileStream = new FileStream(encodingScrutatorFile.File.FullName, FileMode.Open,
                                                       FileAccess.ReadWrite, FileShare.None))
                {
                    var streamReader = new StreamReader(fileStream, encodingScrutatorFile.Encoding);
                    var text         = streamReader.ReadToEnd();

                    // 截断长度,相当于重新创建文件。如果没有下面代码,那么在前后文件长度修改时,将会在文件最后加上原先的文件
                    fileStream.Position = 0;
                    fileStream.SetLength(0);

                    var streamWriter = new StreamWriter(fileStream, sitpulationEncoding);
                    streamWriter.Write(text);
                    streamWriter.Flush();
                }
            }

            Console.WriteLine($"修复完成");
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 输出不符合规范编码文件
        /// </summary>
        private static string PintnoConformEncodingFile(EncodingScrutatorFolder encodingScrutatorFolder,
                                                        string white = "", StringBuilder str = null)
        {
            if (str == null)
            {
                str = new StringBuilder();
            }

            foreach (var temp in encodingScrutatorFolder.Folder)
            {
                PintnoConformEncodingFile(temp, white + temp.Name + "/", str);
            }

            foreach (var temp in encodingScrutatorFolder.File)
            {
                //str.Append(white);
                str.Append($"文件名: {white}{temp.File.Name}\r\n");
                if (temp.Ignore)
                {
                    str.Append("文件忽略\r\n");
                }
                else
                {
                    str.Append(
                        $"编码 :{temp.Encoding.EncodingName.PadRight(10)} {(temp.Encoding.Equals(Encoding.ASCII) ? "" : $"置信度:{temp.ConfidenceCount}")} \r\n");
                    //str.Append("编码 :" + temp.Encoding.EncodingName + " 置信度 " + temp.ConfidenceCount + " ");
                    str.Append("状态:");
                    if (encodingScrutatorFolder.SitpulationEncodingSetting.ConformtotheDefaultEncoding(temp.Encoding))
                    {
                        str.Append("文件符合规范");
                    }
                    else
                    {
                        str.Append("文件不符合规范");
                        IllicitFile.Add(temp);
                    }

                    str.Append("\r\n");

                    //str.Append(
                    //    encodingScrutatorFolder.SitpulationEncodingSetting.ConformtotheDefaultEncoding(temp.Encoding)
                    //        ? "文件符合规范"
                    //        : "文件不符合规范");
                }

                str.Append("\r\n");
            }

            return(str.ToString());
        }
Ejemplo n.º 3
0
        public void InspectFolderEncoding()
        {
            EncodingScrutatorFolder encodingScrutatorFolder = new EncodingScrutatorFolder(new DirectoryInfo(Folder));

            EncodingNormalior.Model.InspectEncoding.InspectFolderEncodingAsync(encodingScrutatorFolder,
                                                                               new Progress <EncodingScrutatorFile>()).Wait();

            StringBuilder str = new StringBuilder();

            foreach (var temp in encodingScrutatorFolder.File)
            {
                str.Append(temp.Name + " " + temp.Encoding.EncodingName + "\r\n");
            }
            Debug.Write(str.ToString());
        }
Ejemplo n.º 4
0
        private static void ParseCommand(CommandLineArgumentParser arguments)
        {
            ConformCommand(arguments);
            string folder = arguments.Get(FolderCommand).Next;

            if (string.IsNullOrEmpty(folder))
            {
                throw new ArgumentCommadnException(NoFolderArgException);
            }

            // 如果输入 "E:\lindexi\EncodingNormalior\" 那么命令行将会传入 E:\lindexi\EncodingNormalior\" 字符串
            if (folder.EndsWith("\""))
            {
                folder = folder.Substring(0, folder.Length - 1);
            }

            folder = Path.GetFullPath(folder);
            if (!Directory.Exists(folder))
            {
                throw new ArgumentCommadnException("不存在文件夹" + folder);
            }

            EncodingScrutatorFolder encodingScrutatorFolder = new EncodingScrutatorFolder(new DirectoryInfo(folder));

            if (arguments.Has(IncludeFileCommand))
            {
                var includeFile  = arguments.Get(IncludeFileCommand).Take();
                var wildCardFile = /*IncludeFileSetting.ReadIncludeFile(includeFile);*/
                                   new FileInfo(includeFile);

                IncludeFileSetting includeFileSetting = new IncludeFileSetting(wildCardFile);
                encodingScrutatorFolder.IncludeFileSetting = includeFileSetting;
            }

            if (arguments.Has(EncodingCommand))
            {
                string encodingCommand = arguments.Get(EncodingCommand).Take();
                encodingCommand = encodingCommand.ToLower();
                Encoding encoding;
                switch (encodingCommand)
                {
                case "utf8":
                case "utf-8":
                    encoding = Encoding.UTF8;
                    break;

                case "gbk":
                    encoding = Encoding.GetEncoding("gbk");
                    break;

                case "bigendianunicode":
                    encoding = Encoding.BigEndianUnicode;
                    break;

                default:
                    throw new ArgumentException("输入无法识别编码");
                }

                encodingScrutatorFolder.SitpulationEncodingSetting = new SitpulationEncodingSetting()
                {
                    SitpulationEncoding = encoding
                };
            }

            if (arguments.Has(WhiteListCommand))
            {
                var whiteListFile = arguments.Get(WhiteListCommand).Take();
                encodingScrutatorFolder.InspectFileWhiteListSetting =
                    InspectFileWhiteListSetting.ReadWhiteListSetting(whiteListFile);
            }

            encodingScrutatorFolder.InspectFolderEncoding();

            var output = PintnoConformEncodingFile(encodingScrutatorFolder);

            if (arguments.Has(Quiet) && bool.TryParse(arguments.Get(Quiet).Take(), out var shouldQuiet) &&
                shouldQuiet is true)
            {
                // 如果需要静默,那么什么都不输出
            }
            else
            {
                Console.WriteLine(output);
            }

            if (IllicitFile.Count > 0)
            {
                if (arguments.Has(TryFixCommand))
                {
                    var tryFix = arguments.Get(TryFixCommand).Take();
                    if (bool.TryParse(tryFix.ToString(), out var value) && value is true)
                    {
                        TryFix(encodingScrutatorFolder);
                        return;
                    }
                }

                StringBuilder str = new StringBuilder();
                str.Append($"存在不符合规范文件:  {IllicitFile.Count}\r\n");
                foreach (var temp in IllicitFile)
                {
                    str.Append(temp.File.FullName + "\r\n");
                }

                str.Append("可采用如下命令修复文件编码:")
                .Append("\r\n")     // 强行规定换行
                // 下面使用 dotnet tool update 的 update 是预期的,这个命令的意思是在没有安装的时候安装,有安装的时候更新
                .Append("dotnet tool update -g dotnetCampus.EncodingNormalior")
                .Append("\r\n")
                .Append($"EncodingNormalior -f \"{encodingScrutatorFolder.FaceFolder.FullName}\" --TryFix true")
                .Append("\r\n")
                .Append("或安装编码规范 VS 插件工具:https://marketplace.visualstudio.com/items?itemName=lindexigd.vs-extension-18109")
                .Append("\r\n");

                throw new EncodingNormaliorException(str.ToString());
            }
            else
            {
                Console.WriteLine("恭喜你,没有存在不规范文件\r\n");
            }
        }
Ejemplo n.º 5
0
        private static void ParseCommand(CommandLineArgumentParser arguments)
        {
            ConformCommand(arguments);
            var folder = arguments.Get(FolderCommand).Next;

            if (string.IsNullOrEmpty(folder))
            {
                throw new ArgumentCommadnException(NoFolderArgException);
            }
            if (!Directory.Exists(folder))
            {
                throw new ArgumentCommadnException("不存在文件夹" + folder);
            }

            EncodingScrutatorFolder encodingScrutatorFolder = new EncodingScrutatorFolder(new DirectoryInfo(folder));

            if (arguments.Has(IncludeFileCommand))
            {
                var includeFile  = arguments.Get(IncludeFileCommand).Take();
                var wildCardFile = /*IncludeFileSetting.ReadIncludeFile(includeFile);*/
                                   new FileInfo(includeFile);

                IncludeFileSetting includeFileSetting = new IncludeFileSetting(wildCardFile);
                encodingScrutatorFolder.IncludeFileSetting = includeFileSetting;
            }
            if (arguments.Has(EncodingCommand))
            {
                string encodingCommand = arguments.Get(EncodingCommand).Take();
                encodingCommand = encodingCommand.ToLower();
                Encoding encoding;
                switch (encodingCommand)
                {
                case "utf8":
                case "utf-8":
                    encoding = Encoding.UTF8;
                    break;

                case "gbk":
                    encoding = Encoding.GetEncoding("gbk");
                    break;

                case "bigendianunicode":
                    encoding = Encoding.BigEndianUnicode;
                    break;

                default:
                    throw new ArgumentException("输入无法识别编码");
                }
                encodingScrutatorFolder.SitpulationEncodingSetting = new SitpulationEncodingSetting()
                {
                    SitpulationEncoding = encoding
                };
            }
            if (arguments.Has(WhiteListCommand))
            {
                var whiteListFile = arguments.Get(WhiteListCommand).Take();
                encodingScrutatorFolder.InspectFileWhiteListSetting = InspectFileWhiteListSetting.ReadWhiteListSetting(whiteListFile);
            }

            encodingScrutatorFolder.InspectFolderEncoding();
            Console.WriteLine(PintnoConformEncodingFile(encodingScrutatorFolder));
            if (_illicitFile.Count > 0)
            {
                StringBuilder str = new StringBuilder();
                str.Append($"存在不符合规范文件:  {_illicitFile.Count}\r\n");
                foreach (var temp in _illicitFile)
                {
                    str.Append(temp.File.FullName + "\r\n");
                }
                throw new Exception(str.ToString());
            }
            else
            {
                Console.WriteLine("恭喜你,没有存在不规范文件\r\n");
            }
        }