private void ParseAccount()
        {
            if (Account == null)
            {
                Account = Account.ReadAccount();
            }

            var encoding = Account.ConvertCriterionEncoding();

            SitpulationEncoding = encoding;
            if (_whiteList == null)
            {
                _whiteList =
                    new InspectFileWhiteListSetting(
                        Account.WhiteList.Split('\n').Select(temp => temp.Replace("\r", "")).ToList());
            }
            if (_includeFile == null)
            {
                _includeFile =
                    new IncludeFileSetting(
                        Account.FileInclude.Split('\n')
                        .Select(temp => temp.Replace("\r", ""))
                        .Where(temp => !string.IsNullOrEmpty(temp))
                        .ToList());
            }
        }
 /// <summary>
 /// 判断白名单是否非法
 /// </summary>
 /// <returns>true 可以作为白名单 ,false 不可做白名单</returns>
 private bool ConformWhiteList()
 {
     try
     {
         var inspectFileWhiteListSetting =
             new InspectFileWhiteListSetting(
                 new List <string>(Account.WhiteList.Split('\n').Select(temp => temp.Replace("\r", "")).ToList()));
     }
     catch (Exception e)
     {
         MessageBox.Show(e.Message, "白名单格式错误");
         return(false);
     }
     return(true);
 }
        public void ReadWhiteListSetting()
        {
            if (!System.IO.File.Exists(File))
            {
                WriteFile();
            }

            InspectFileWhiteListSetting inspectFileWhiteListSetting = InspectFileWhiteListSetting.ReadWhiteListSetting(File);

            var file = inspectFileWhiteListSetting.FileRegexWhiteList;

            var folder = inspectFileWhiteListSetting.FolderWhiteList;

            string str = @"1.png
1.jpg
1.tmp
1.exe
1.mp4
1.snk
1.pfx
1.zip
1.rar
1.7z
1.cer";

            TestRegexFile(file, str, true);

            str = "1.png1";
            Assert.AreEqual((new Regex(".*\\.png$")).IsMatch(str), false);
            TestRegexFile(file, str, false);


            str = @".git
obj
bin
packages";

            foreach (var temp in str.Split('\n').Select(temp => temp.Replace("\r", "")))
            {
                Assert.AreEqual(folder.Any(t => t == temp), true);
            }
        }
Exemple #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");
            }
        }
Exemple #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");
            }
        }