行尾2

 

 

所以符合Windows开发标准的文本编辑器Visual Studio才会提醒你当前编辑的文本不符合Windows行尾标准..

1.Windows 中的换行符"\r\n"

2.Unix/Linux 平台换行符是 "\n"。

3.MessageBox.Show() 的换行符为 "\n"

4.Console 的换行符为 "\n"

换行符还因平台差异而不同。

解决方案:

1. 为保持平台的通用性,可以用系统默认换行符 System.Environment.NewLine。

2. 替换所有的非标准换行符

 

class Program_Utf8
{
static void Main(string[] args)
{
String folderPath = @"E:\文件夹路径\";

ParseDirectory(folderPath, "*.cs", (filePath) =>
{
string text = "";
using (StreamReader read = new StreamReader(filePath, Encoding.Default))
{
string oldtext = read.ReadToEnd();
text = oldtext;
text = text.Replace("\n", "\r\n");
text = text.Replace("\r\r\n", "\r\n"); // 防止替换了正常的换行符
if (oldtext.Length == text.Length)
{
Console.WriteLine(filePath.Substring(filePath.LastIndexOf("\\") + 1) + " 不需要标准化");
return; // 如果没有变化就退出
}
}
File.WriteAllText(filePath, text, Encoding.UTF8); //utf-8格式保存,防止乱码

Console.WriteLine(filePath.Substring(filePath.LastIndexOf("\\") + 1) + " 行尾标准化完成");
});

Console.ReadKey();
}

/// <summary>递归所有的目录,根据过滤器找到文件,并使用委托来统一处理</summary>
/// <param name="info"></param>
/// <param name="filter"></param>
/// <param name="action"></param>
static void ParseDirectory(string folderPath, string filter, Action<string> action)
{
if (string.IsNullOrWhiteSpace(folderPath)
|| folderPath.EndsWith("debug", StringComparison.OrdinalIgnoreCase)
|| folderPath.EndsWith("obj", StringComparison.OrdinalIgnoreCase)
|| folderPath.EndsWith("bin", StringComparison.OrdinalIgnoreCase))
return;

Console.WriteLine("读取目录:" + folderPath);

// 处理文件
string[] fileNameArray = Directory.GetFiles(folderPath, filter);
if (fileNameArray.Length > 0)
{
foreach (var filePath in fileNameArray)
{
action(filePath);
}
}
else
{
Console.WriteLine("未发现文件!");
}

Console.WriteLine("====================================");

//得到子目录,递归处理
string[] dirs = Directory.GetDirectories(folderPath);
var iter = dirs.GetEnumerator();
while (iter.MoveNext())
{
string str = (string)(iter.Current);
ParseDirectory(str, filter, action);
}
}
}View Code

posted @ 2021-03-04 18:15  长风要破浪  阅读(75)  评论(0)    收藏  举报