zoukankan      html  css  js  c++  java
  • C# winForm utf8 gbk 相互转码小工具

    代码大多来源于网络

    开发工具:vs2017

    项目文件:

    链接: https://pan.baidu.com/s/1JIcCo_ZNcsw1U2Z6pB5s_g

    提取码: ecjk

    界面:

    代码:

    using System;
    using System.IO;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Windows.Forms;
    
    namespace UTF8_GBK_TransCode
    {
        public partial class Form1 : Form
        {
            
            public Form1()
            {
                InitializeComponent();
                CmbType.SelectedIndex = 0;//显示默认转换类型
            }
    
            //选择目标文件夹按钮
            private void BtnSeleteTargetFolder_Click(object sender, EventArgs e)
            {
                if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
                {
                    TxbTargetFolder.Text = folderBrowserDialog1.SelectedPath;
                }
            }
    
            //目标文件夹路径改变时
            private void TxbTargetFolder_TextChanged(object sender, EventArgs e)
            {
                showList();
            }
            //格式文本框内容改变时
            private void TxbFileExt_TextChanged(object sender, EventArgs e)
            {
                showList();
            }
    
            //显示文件列表
            public void showList()
            {
                if (TxbTargetFolder.Text.Trim() != "")
                {
                    //初始化文件列表
                    CheckedListBoxFiles.Items.Clear();
    
                    if (Directory.Exists(TxbTargetFolder.Text.Trim()))//如果文件夹存在
                    {
                        try
                        {
                            GetDirectory(TxbTargetFolder.Text.Trim());//遍历目录下所有文件
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("获取源文件内文件列表失败:" + ex.Message);
                        }
                    }
                    else if (File.Exists(TxbTargetFolder.Text.Trim()))//如果文件存在
                    {
                        FileInfo f = new FileInfo(TxbTargetFolder.Text.Trim());
                        Regex r = new Regex(f.Extension);
                        Match m = r.Match(TxbFileExt.Text.Trim());
                        if (m.Success)
                        {//过滤文件格式
                            int index = CheckedListBoxFiles.Items.Add(TxbTargetFolder.Text.Trim());//添加listbox,显示文件
                            CheckedListBoxFiles.SetItemChecked(index, true);//默认勾选新增项
                        }
                    }
                }
            }
    
            //获得指定路径下所有子目录名
            public void GetDirectory(string path)
            {
                GetFileName(path);
                DirectoryInfo root = new DirectoryInfo(path);//目录
                foreach (DirectoryInfo d in root.GetDirectories())//遍历目录
                {
                    GetDirectory(d.FullName);
                }
            }
    
            //获得指定路径下所有文件名
            public void GetFileName(string path)
            {
                DirectoryInfo root = new DirectoryInfo(path);//目录
                foreach (FileInfo f in root.GetFiles())
                {
                    Regex r = new Regex(f.Extension);
                    Match m = r.Match(TxbFileExt.Text.Trim());
                    if(m.Success)//过滤文件格式
                    {
                        int index=CheckedListBoxFiles.Items.Add(f.FullName);//添加listbox,显示文件
                        CheckedListBoxFiles.SetItemChecked(index, true);//默认勾选新增项
                        toolStripStatusLabel1.Text = "选中 " +CheckedListBoxFiles.Items.Count.ToString()+ " 个文件";//显示文件个数
                    }
                }
            }
    
            //拖动文件夹进入文件路径文本框时
            private void TxbTargetFolder_DragEnter(object sender, DragEventArgs e)
            {
                if (e.Data.GetDataPresent(DataFormats.FileDrop))//如果是文件类型
                {
                    e.Effect = DragDropEffects.Link;
                }
                else
                {
                    e.Effect = DragDropEffects.None;
                }
            }
    
            //拖动文件夹到文件路径文本框后
            private void TxbTargetFolder_DragDrop(object sender, DragEventArgs e)
            {
                TxbTargetFolder.Text = ((Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();//获取文件|文件夹路径
            }
    
            //开始转码
            private void BtnStartTransCode_Click(object sender, EventArgs e)
            {
                if (CheckedListBoxFiles.CheckedItems.Count > 0)//如果有选中的文件
                {
                    int coverSuccess = 0;//转换成功数
    
                    if(CmbType.SelectedIndex == 0)//GBK 转 UTF8
                    {
                        try{
                            for (int i = 0; i < CheckedListBoxFiles.CheckedItems.Count; i++)//遍历选中项
                            {
                                GBKtoUTF8(CheckedListBoxFiles.CheckedItems[i].ToString());//调用转码函数
                                coverSuccess++;
                            }
                        } 
                        catch (Exception ex)
                        {
                            
                            toolStripStatusLabel1.Text = ex.Message;
                        }
                        finally
                        {
                            toolStripStatusLabel1.Text = "转码成功文件: " + coverSuccess.ToString() + "";
                        }
                    }
                    else if(CmbType.SelectedIndex == 1)//UTF8 转 GBK
                    {
                        try
                        {
                            for (int i = 0; i < CheckedListBoxFiles.CheckedItems.Count; i++)//遍历选中项
                            {
                                UTF8toGBK(CheckedListBoxFiles.CheckedItems[i].ToString());//调用转码函数
                                coverSuccess++;
                            }
                        }
                        catch (Exception ex)
                        {
                            toolStripStatusLabel1.Text = ex.Message;
                        }
                        finally
                        {
                            toolStripStatusLabel1.Text = "转码成功文件: " + coverSuccess.ToString() + "";
                        }
                    }
                    
                }
            }
    
            public void GBKtoUTF8(string filePath)//GBK 转 UTF8
            {
                
                var buffer = File.ReadAllBytes(filePath);//读取文件内容
                buffer = Encoding.Convert(Encoding.GetEncoding("gbk"), Encoding.UTF8, buffer);//转码
                File.WriteAllBytes(filePath, buffer);//写入文件
                toolStripStatusLabel1.Text = "转码成功";
            }
    
            public void UTF8toGBK(string filePath)//UTF8 转 GBK
            {
                var buffer = File.ReadAllBytes(filePath);//读取文件内容
                buffer = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("gbk"), buffer);//转码
                File.WriteAllBytes(filePath, buffer);//写入文件
            }
    
            //全选按钮
            private void BtnSelectAll_Click(object sender, EventArgs e)
            {
                int fileItems = CheckedListBoxFiles.Items.Count;
                if (fileItems > 0)
                {
                    for(int i = 0; i < fileItems; i++)
                    {
                        CheckedListBoxFiles.SetItemChecked(i,true);
                    }
                }
            }
    
            //反选按钮
            private void BtnSelectInvert_Click(object sender, EventArgs e)
            {
                int fileItems = CheckedListBoxFiles.Items.Count;
                if (fileItems > 0)
                {
                    for (int i = 0; i < fileItems; i++)
                    {
                        if (CheckedListBoxFiles.GetItemChecked(i))
                        {
                            CheckedListBoxFiles.SetItemChecked(i, false);
                        }
                        else
                        {
                            CheckedListBoxFiles.SetItemChecked(i, true);
                        }
                    }
                }
            }
    
            //文件列表中的项改变选中状态时
            private void CheckedListBoxFiles_ItemCheck(object sender, ItemCheckEventArgs e)
            {
                // 这个事件是指示某项的选中状态将要被更改、在更改前会执行这个事件
                // 所以checkedListBox.CheckedItems.Count 获取的是更改之前的值
    
                if (e.NewValue == CheckState.Checked)//选中
                {
                    toolStripStatusLabel1.Text = "选中 " + (CheckedListBoxFiles.CheckedItems.Count + 1).ToString() + " 个文件";
                }
                else//非选中
                {
                    toolStripStatusLabel1.Text = "选中 " + (CheckedListBoxFiles.CheckedItems.Count - 1).ToString() + " 个文件";
                }
            }
        }
    }
  • 相关阅读:
    Windows Server 2019 Core 或 hyper-v server 2019图形工具安装
    添加进站允许规则和出站规则命令 netsh advfirewall firewall
    ID 1196 请确保与从属 IP 地址相关联的网络适配器已配置为至少可以访问一个 DNS 服务器
    通过注册表的方式禁用IPV6
    MS-SQL SERVER服务器占用CPU高,用语句先排查。
    hyper-v server 卸载软件(MD-DOS卸载软件)
    除getopenFilename以外。打开文件的另一种方式FileDialog
    返回当前工作簿的目录ThisWorkbook.path & ""
    筛选
    自动填充
  • 原文地址:https://www.cnblogs.com/nb08611033/p/10175324.html
Copyright © 2011-2022 走看看