using System; using System.IO; using System.Text; using System.Windows.Forms; namespace FileNameCharsetConvert { public partial class MainForm : Form { public MainForm() { InitializeComponent(); cmbEncoding.DataSource = Encoding.GetEncodings(); } private void btnSelectFolder_Click(object sender, EventArgs e) { if (dlgFolder.ShowDialog() == DialogResult.OK) { txtFolder.Text = dlgFolder.SelectedPath; } } private void btnScan_Click(object sender, EventArgs e) { lvMain.Items.Clear(); string[] files = Directory.GetFiles(txtFolder.Text, "*.*", System.IO.SearchOption.AllDirectories); for (int i = 0; i < files.Length; i++) { proc.Value = (int)(i * 1.0f / files.Length * 100); ListViewItem lvi = new ListViewItem(); lvi.Text = files[i]; lvi.SubItems.Add(" "); lvi.SubItems.Add("未转换"); lvMain.Items.Add(lvi); } lvces(); proc.Value = 100; } private void btnConvert_Click(object sender, EventArgs e) { EncodingInfo enci = (EncodingInfo)cmbEncoding.SelectedItem; Encoding enc = enci.GetEncoding(); Encoding def = Encoding.Default; for (int i = 0; i < lvMain.Items.Count; i++) { proc.Value = (int)(i * 1.0f / lvMain.Items.Count * 100); ListViewItem item = lvMain.Items[i]; item.SubItems[1].Text = enc.GetString(def.GetBytes(item.Text)); item.SubItems[2].Text = "已转换,未应用"; } lvces(); } private void lvces() { foreach (ColumnHeader item in lvMain.Columns) { item.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); } } private void btnApplySelection_Click(object sender, EventArgs e) { for (int i = 0; i < lvMain.SelectedItems.Count; i++) { ListViewItem lvi = lvMain.SelectedItems[i]; try { File.Move(lvi.Text, lvi.SubItems[1].Text); lvi.SubItems[2].Text = "成功应用"; } catch (Exception ex) { lvi.SubItems[2].Text = "应用失败:" + ex.Message; } } } private void txtFolder_DragEnter(object sender, DragEventArgs e) { string[] files; e.Effect = e.Data.GetDataPresent(DataFormats.FileDrop) && (files = (string[])e.Data.GetData(DataFormats.FileDrop)).Length == 1 && Directory.Exists(files[0]) ? DragDropEffects.Link : DragDropEffects.None; } private void txtFolder_DragDrop(object sender, DragEventArgs e) { txtFolder.Text = ((string[])e.Data.GetData(DataFormats.FileDrop))[0]; } } }