批量修改文件编码格式为Utf8,且移除Bom标记的工具

这是一个C#程序,用于查找指定文件夹中特定类型的文件,然后去除这些文件的BOM标记,并将它们复制到目标目录。用户可以输入源文件夹、是否替换原有文件以及目标文件夹和文件类型。程序使用StreamReader读取文件,以UTF-8无BOM格式重新写入。
摘要由CSDN通过智能技术生成

工具地址 https://github.com/KIPKIPS/RemoveFileBomMark
代码:

using System;
using System.IO;
using System.Text;

namespace RemoveFileBomMark {
    class Program {
            public static void Main() {
                //tips
                Console.WriteLine("Folder path format example : D:/File/Path");
                //源文件夹
                Console.WriteLine("Please enter the folder you need to find :");
                string searchDir = Console.ReadLine();
                Console.WriteLine("Replace the original path?(y/n)");
                string replace = Console.ReadLine();
                bool isReplace = replace == "y";
                string tarDir = searchDir;
                if (!isReplace) {
                    //复制的目标文件夹
                    Console.WriteLine("Please enter the destination folder :");
                    tarDir = Console.ReadLine();
                }

                //查找的文件类型
                Console.WriteLine("Please enter the file suffix :");
                string fileType = Console.ReadLine();
                try {
                    if (searchDir != null) {
                        ListFiles(new DirectoryInfo(searchDir), searchDir, tarDir, fileType);
                    }
                } catch (IOException e) {
                    Console.WriteLine(e.Message);
                }

                Console.WriteLine("Task finished");
                Console.ReadLine();
            }
            private static Encoding GetEncoding(string filePath) {
                using (var reader = new StreamReader(filePath, Encoding.Default, true)) {
                    if (reader.Peek() >= 0) // you need this!
                        reader.Read();

                    Encoding encoding = reader.CurrentEncoding;
                    reader.Close();
                    return encoding;
                }
            }
            public static void ListFiles(FileSystemInfo info, string searchDir, string tarDir, string fileType) {
                if (!info.Exists) {
                    Console.WriteLine(info.FullName + " is not exist");
                    return;
                }
                DirectoryInfo dir = info as DirectoryInfo;
                //不是目录
                if (dir == null) {
                    Console.WriteLine(dir + "is not a directory");
                    return;
                }
                FileSystemInfo[] files = dir.GetFileSystemInfos();
                for (int i = 0; i < files.Length; i++) {
                    FileInfo file = files[i] as FileInfo;
                    if (file != null) {
                        if (file.Extension == "." + fileType) {
                            string dirPath = file.Directory.ToString();
                            string searchDirConv = searchDir.Replace("/", "\\");
                            string tarDirConv = tarDir.Replace("/", "\\");
                            string newDirPath = dirPath.Replace(searchDirConv, tarDirConv);
                            string filePath = file.FullName.ToString();
                            //创建文件夹
                            if (new DirectoryInfo(newDirPath).Exists == false) {
                                Console.WriteLine("create floder : " + newDirPath);
                                Directory.CreateDirectory(newDirPath);
                            }
                            string newFilePath = filePath.Replace(searchDirConv, tarDirConv);
                            string tips = filePath == newFilePath ? "replaced" : "copied";
                            Console.WriteLine("file has been " + tips + " to path : " + newFilePath);
                            //Encoding oldEncoding = GetEncoding(file.FullName.ToString());
                            //读取文件内容
                            string str = string.Empty;
                            using (StreamReader sr = new StreamReader(filePath, new UTF8Encoding())) {
                                str = sr.ReadToEnd();
                                sr.Close();
                            }
                            //以UTF-8 NO-BOM格式重新写入文件
                            Encoding newEncoding = new UTF8Encoding(false);
                            using (StreamWriter sw = new StreamWriter(newFilePath, false, newEncoding)) {
                                sw.Write(str);
                                //Console.WriteLine(str);
                                sw.Close();
                            }
                        }
                    } else { //子目录递归查找
                        ListFiles(files[i], searchDir, tarDir, fileType);
                    }
                }
            }
        }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值