public static void CheckingFilesEncoding(IWriteToOutput iWriteToOutput, ConnectionData connectionData, IEnumerable <SelectedFile> selectedFiles, out List <SelectedFile> filesWithoutUTF8Encoding) { filesWithoutUTF8Encoding = new List <SelectedFile>(); int countWithUTF8Encoding = 0; List <string> listNotExistsOnDisk = new List <string>(); List <string> listNotHaveBOM = new List <string>(); List <string> listWrongEncoding = new List <string>(); List <string> listMultipleEncodingHasUTF8 = new List <string>(); List <string> listMultipleEncodingHasNotUTF8 = new List <string>(); foreach (var selectedFile in selectedFiles) { if (File.Exists(selectedFile.FilePath)) { var arrayFile = File.ReadAllBytes(selectedFile.FilePath); var encodings = ContentCoparerHelper.GetFileEncoding(arrayFile); if (encodings.Count > 0) { if (encodings.Count == 1) { if (encodings[0].CodePage == Encoding.UTF8.CodePage) { countWithUTF8Encoding++; } else { listWrongEncoding.Add(string.Format("{0} has encoding {1}", selectedFile.FriendlyFilePath, encodings[0].EncodingName)); filesWithoutUTF8Encoding.Add(selectedFile); } } else { filesWithoutUTF8Encoding.Add(selectedFile); bool hasUTF8 = false; StringBuilder str = new StringBuilder(); foreach (var enc in encodings) { if (enc.CodePage == Encoding.UTF8.CodePage) { hasUTF8 = true; } if (str.Length > 0) { str.Append(", "); str.Append(enc.EncodingName); } } if (hasUTF8) { listMultipleEncodingHasUTF8.Add(string.Format("{0} has encoding {1}", selectedFile.FriendlyFilePath, str.ToString())); } else { listMultipleEncodingHasNotUTF8.Add(string.Format("{0} has encoding {1}", selectedFile.FriendlyFilePath, str.ToString())); } } } else { listNotHaveBOM.Add(selectedFile.FriendlyFilePath); filesWithoutUTF8Encoding.Add(selectedFile); } } else { listNotExistsOnDisk.Add(selectedFile.FilePath); } } if (listNotHaveBOM.Count > 0) { iWriteToOutput.WriteToOutput(connectionData, string.Empty); iWriteToOutput.WriteToOutput(connectionData, "File does not have encoding: {0}", listNotHaveBOM.Count); listNotHaveBOM.Sort(); listNotHaveBOM.ForEach(item => iWriteToOutput.WriteToOutput(connectionData, item)); } if (listWrongEncoding.Count > 0) { iWriteToOutput.WriteToOutput(connectionData, string.Empty); iWriteToOutput.WriteToOutput(connectionData, "File has wrong Encoding: {0}", listWrongEncoding.Count); listWrongEncoding.Sort(); listWrongEncoding.ForEach(item => iWriteToOutput.WriteToOutput(connectionData, item)); } if (listMultipleEncodingHasUTF8.Count > 0) { iWriteToOutput.WriteToOutput(connectionData, string.Empty); iWriteToOutput.WriteToOutput(connectionData, "File complies multiple Encoding with UTF8 in list: {0}", listMultipleEncodingHasUTF8.Count); listMultipleEncodingHasUTF8.Sort(); listMultipleEncodingHasUTF8.ForEach(item => iWriteToOutput.WriteToOutput(connectionData, item)); } if (listMultipleEncodingHasNotUTF8.Count > 0) { iWriteToOutput.WriteToOutput(connectionData, string.Empty); iWriteToOutput.WriteToOutput(connectionData, "File complies multiple Encoding WITHOUT UTF8 in list: {0}", listMultipleEncodingHasNotUTF8.Count); listMultipleEncodingHasNotUTF8.Sort(); listMultipleEncodingHasNotUTF8.ForEach(item => iWriteToOutput.WriteToOutput(connectionData, item)); } if (listNotExistsOnDisk.Count > 0) { iWriteToOutput.WriteToOutput(connectionData, string.Empty); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.FileNotExistsFormat1, listNotExistsOnDisk.Count); listNotExistsOnDisk.Sort(); listNotExistsOnDisk.ForEach(item => iWriteToOutput.WriteToOutput(connectionData, item)); } if (countWithUTF8Encoding > 0) { if (countWithUTF8Encoding == selectedFiles.Count()) { iWriteToOutput.WriteToOutput(connectionData, string.Empty); iWriteToOutput.WriteToOutput(connectionData, "All Files has UTF8 Encoding: {0}", countWithUTF8Encoding); } else { iWriteToOutput.WriteToOutput(connectionData, string.Empty); iWriteToOutput.WriteToOutput(connectionData, "Files has UTF8 Encoding: {0}", countWithUTF8Encoding); } } }