vs报错“以下文件中的行尾不一致,是否将行尾标准化”
vs报错“以下文件中的行尾不一致,是否将行尾标准化”
分析:
通过读取源文件,发现换行都使用的是“\n”
Windows和Unix不同的标准引起的...即“回车”和“换行”的问题...
符号 | ASCII码 | 意义 |
\n | 10 | 换行NL |
\r | 13 | 回车CR |
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。到了GUI时代光标都是自由移动的不再有回车的意义...
所以符合Windows开发标准的文本编辑器Visual Studio才会提醒你当前编辑的文本不符合Windows行尾标准..
1.Windows 中的换行符"\r\n"
2.Unix/Linux 平台换行符是 "\n"。
3.MessageBox.Show() 的换行符为 "\n"
4.Console 的换行符为 "\n"
换行符还因平台差异而不同。
解决方案:
1. 为保持平台的通用性,可以用系统默认换行符 System.Environment.NewLine。
2. 替换所有的非标准换行符
1 class Program_Utf8 2 { 3 static void Main(string[] args) 4 { 5 String folderPath = @"E:\文件夹路径\"; 6 7 ParseDirectory(folderPath, "*.cs", (filePath) => 8 { 9 string text = ""; 10 using (StreamReader read = new StreamReader(filePath, Encoding.Default)) 11 { 12 string oldtext = read.ReadToEnd(); 13 text = oldtext; 14 text = text.Replace("\n", "\r\n"); 15 text = text.Replace("\r\r\n", "\r\n"); // 防止替换了正常的换行符 16 if (oldtext.Length == text.Length) 17 { 18 Console.WriteLine(filePath.Substring(filePath.LastIndexOf("\\") + 1) + " 不需要标准化"); 19 return; // 如果没有变化就退出 20 } 21 } 22 File.WriteAllText(filePath, text, Encoding.UTF8); //utf-8格式保存,防止乱码 23 24 Console.WriteLine(filePath.Substring(filePath.LastIndexOf("\\") + 1) + " 行尾标准化完成"); 25 }); 26 27 Console.ReadKey(); 28 } 29 30 /// <summary>递归所有的目录,根据过滤器找到文件,并使用委托来统一处理</summary> 31 /// <param name="info"></param> 32 /// <param name="filter"></param> 33 /// <param name="action"></param> 34 static void ParseDirectory(string folderPath, string filter, Action<string> action) 35 { 36 if (string.IsNullOrWhiteSpace(folderPath) 37 || folderPath.EndsWith("debug", StringComparison.OrdinalIgnoreCase) 38 || folderPath.EndsWith("obj", StringComparison.OrdinalIgnoreCase) 39 || folderPath.EndsWith("bin", StringComparison.OrdinalIgnoreCase)) 40 return; 41 42 Console.WriteLine("读取目录:" + folderPath); 43 44 // 处理文件 45 string[] fileNameArray = Directory.GetFiles(folderPath, filter); 46 if (fileNameArray.Length > 0) 47 { 48 foreach (var filePath in fileNameArray) 49 { 50 action(filePath); 51 } 52 } 53 else 54 { 55 Console.WriteLine("未发现文件!"); 56 } 57 58 Console.WriteLine("===================================="); 59 60 //得到子目录,递归处理 61 string[] dirs = Directory.GetDirectories(folderPath); 62 var iter = dirs.GetEnumerator(); 63 while (iter.MoveNext()) 64 { 65 string str = (string)(iter.Current); 66 ParseDirectory(str, filter, action); 67 } 68 } 69 }
欢迎在评论区留下你宝贵的意见,不论好坏都是我前进的动力(cnblogs 排名提升)!
如果喜欢,记得点赞、推荐、关注、收藏、转发 ... ;)