文本编码批量转换器——搞asp.net必备

    中房网站由于论坛系统的变更,经历了两次整站编码的变更,开始采用cs的时候,不得不使用了UTF-8编码,这样一来,所有的aspx,ascx都得utf-8保存了,后来换成了discuz,就又要改回gb2312,页面多啊,手动改不完,么办?

    上网找到了一些程序,不过都不顺手,于是就自己写一个吧!不知不觉搞了一整天,这不出来了,还挺好用,看看截图:

怎么样,看起来不错吧,呵呵。下面给出主要源代码:

 

using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Text;
using  System.Windows.Forms;
using  System.IO;
using  System.Text.RegularExpressions;
using  System.Threading;

namespace  CodeConvert
{
    
public partial class Form1 : Form
    
{
        
string sourceFolder = string.Empty;
        
string targetCode = string.Empty;
        
string sourceCode = string.Empty;
        
string fileType = string.Empty;
        
string FolderPath = string.Empty;
        Thread thread;

        
public Form1()
        
{
            InitializeComponent();
            timerStatus.Enabled 
= true;
        }


        
private void btnBrowse_Click(object sender, EventArgs e)
        
{
            fbdSourceFolder.ShowDialog();
            
if (fbdSourceFolder.SelectedPath != null && fbdSourceFolder.SelectedPath != "")
            
{
                tbSourceFolder.Text 
= fbdSourceFolder.SelectedPath;
            }

        }


        
private void btnStart_Click(object sender, EventArgs e)
        
{
            sourceFolder 
= tbSourceFolder.Text;
            targetCode 
= cbTargetCode.Text;
            sourceCode 
= cbSourceCode.Text;
            fileType 
= tbFileType.Text.ToLower();

            
if (sourceFolder==string.Empty)
            
{
                MessageBox.Show(
"请指定源文件目录!""错误");
                
return;
            }


            lvResult.Items.Clear();

            FolderPath 
= sourceFolder;

            thread 
= new Thread(new ThreadStart(this.Convert));
            thread.Start();
            btnStart.Enabled 
= false;
        }


        
private void Convert()
        
{
            
string[] fileTypesArray = fileType.Split(';');

            DirectoryInfo di 
= new DirectoryInfo(FolderPath);
            
if (!di.Exists)
            
{
                MessageBox.Show(
"您指定的目录不存在!","错误");
                
return;
            }


            FileInfo[] subFiles 
= di.GetFiles();
            DirectoryInfo[] subFolders 
= di.GetDirectories();

            
//处理每个文件
            foreach (FileInfo file in subFiles)
            
{
                
for (int i = 0; i < fileTypesArray.Length; i++)
                
{
                    
string partten = string.Format("({0})$", fileTypesArray[i].Replace(".""/."));
                    partten 
= partten.Replace("*"@"[^/;?*'<>]");
                    Regex rg 
= new Regex(partten);
                    
if (rg.IsMatch(file.FullName.ToLower()))
                    
{
                        ReCode(file);
                    }

                }

            }


            
//递归处理每个目录
            foreach (DirectoryInfo dir in subFolders)
            
{
                FolderPath 
= dir.FullName;
                Convert();
            }

        }


        
private void ReCode(FileInfo file)
        
{
            lblNowConverting.Text 
= file.FullName;
            
//去掉文件的只读属性和隐藏
            bool isModified = false;
            FileAttributes fa 
= File.GetAttributes(file.FullName);
            
if (fa.ToString().IndexOf("ReadOnly">= 0)
            
{
                isModified 
= true;
                File.SetAttributes(file.FullName,FileAttributes.Archive);
            }


            Encoding sourceEncoding;
            
if (sourceCode.Equals("自动判断"))
            
{
                
try
                
{
                    sourceEncoding 
= TxtFileEncoding.GetEncoding(file.FullName, Encoding.GetEncoding(cbDefaultCode.Text));
                }

                
catch 
                
{
                    
try
                    
{
                        sourceEncoding 
= Encoding.GetEncoding(cbDefaultCode.Text);
                    }

                    
catch
                    
{
                        thread.Abort();
                        MessageBox.Show(
"无效的默认编码!""错误");
                        
return;
                    }

                }

            }

            
else
            
{
                
try
                
{
                    sourceEncoding 
= Encoding.GetEncoding(sourceCode);
                }

                
catch
                
{
                     thread.Abort();
                   MessageBox.Show(
"无效的源编码!""错误");
                    
return;
                }

            }


            StreamReader SRead 
= new StreamReader(file.FullName,sourceEncoding,false);
            
string sourceText = string.Empty;
            sourceText 
= SRead.ReadToEnd();
            SRead.Close();

            
//备份原文件
            if (cbBackup.Checked)
            
{
                
if (File.Exists(file.FullName + ".bak"))
                
{
                    File.SetAttributes(file.FullName 
+ ".bak", FileAttributes.Archive);
                }

                file.CopyTo(file.FullName 
+ ".bak",true);
            }


            Encoding targetEncoding;
            
try
            
{
                targetEncoding 
= Encoding.GetEncoding(targetCode);
            }

            
catch
            
{
                thread.Abort();
                MessageBox.Show(
"无效的目标编码!""错误");
                
return;
            }



            
//以新编码写文件
            StreamWriter SW = new StreamWriter(file.FullName, false, targetEncoding);
            SW.Write(sourceText);
            SW.Close();

            
//恢复属性
            if (isModified)
            
{
                File.SetAttributes(file.FullName, fa);
            }



            ListViewItem lviItem 
= new ListViewItem();
            ListViewItem.ListViewSubItem lvsFile 
= new ListViewItem.ListViewSubItem(lviItem,file.FullName);
            ListViewItem.ListViewSubItem lvsSource 
= new ListViewItem.ListViewSubItem(lviItem, sourceEncoding.EncodingName);
            ListViewItem.ListViewSubItem lvsTarget 
= new ListViewItem.ListViewSubItem(lviItem, targetCode);
            lviItem.SubItems.Insert(
0,lvsFile);
            lviItem.SubItems.Insert(
1,lvsSource);
            lviItem.SubItems.Insert(
2,lvsTarget);
            
            lvResult.Items.Insert(
0,lviItem);

            lblNowConverting.Text 
= string.Empty;

        }


        
private void lvResult_SizeChanged(object sender, EventArgs e)
        
{
            lvResult.Height 
= gbResult.Height - 60;
        }


        
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        
{
            
if (thread != null)
            
{
                thread.Abort();
            }

        }


        
private void btnStop_Click(object sender, EventArgs e)
        
{
            
if (thread != null)
            
{
                thread.Abort();
            }

            lblNowConverting.Text 
= string.Empty;
        }


        
private void btnHelp_Click(object sender, EventArgs e)
        
{
            MessageBox.Show(
@"1. 程序将自动搜索目标目录下所有的指定类型的文本型文件,并备份原始文件。
2. 请勿指定非文本类型的文件进行转换,否则将损坏源文件。
3. 默认编码类型是由于GB2312等无法从文本判断编码而设置。
""使用说明");
        }


        
private void timerStatus_Tick(object sender, EventArgs e)
        
{
            
if (thread != null)
            
{
                
switch (thread.ThreadState)
                
{
                    
case ThreadState.Running:
                        labelNow.Text 
= "正在转换";
                        btnStop.Enabled 
= true;
                        
break;
                    
case ThreadState.Stopped:
                        labelNow.Text 
= "准备就绪";
                        btnStop.Enabled 
= false;
                        btnStart.Enabled 
= true;
                        
break;
                    
case ThreadState.Aborted:
                        labelNow.Text 
= "已经停止";
                        btnStart.Enabled 
= true;
                        btnStop.Enabled 
= false;
                        
break;
                    
default:
                        labelNow.Text
="准备就绪";
                        btnStart.Enabled 
= true;
                        btnStop.Enabled 
= false;
                        
break;
                }

            }

        }

    }

}

 

欢迎指教!下面是项目文件和所有源代码,有需要的朋友们下载吧!

点这里下载

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值