FormReName.cs

using System;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace WinFormReName
{
    public partial class FormFile : Form
    {
        #region AnimateWindow
        [DllImport("user32.dll", EntryPoint = "AnimateWindow")]
        private static extern bool AnimateWindow(IntPtr handle, int ms, int flags);
        #endregion

        private ImageList imageListFile;
        private ChineseLunisolarCalendar lunarCalendar;

        public FormFile()
        {
            #region
            InitializeComponent();
            this.StartPosition = FormStartPosition.CenterScreen;
            lunarCalendar = new ChineseLunisolarCalendar();
            imageListFile = new ImageList();
            imageListFile.ColorDepth = ColorDepth.Depth32Bit;
            imageListFile.ImageSize = new Size(32, 32);
            imageListFile.TransparentColor = Color.Transparent;
            listViewFile.AllowDrop = true;
            listViewFile.MultiSelect = false;
            listViewFile.ShowGroups = true;
            listViewFile.ShowItemToolTips = true;
            listViewFile.LargeImageList = imageListFile;
            listViewFile.SmallImageList = imageListFile;
            listViewFile.StateImageList = imageListFile;
            listViewFile.HeaderStyle = ColumnHeaderStyle.None; // 隐藏列标题。
            listViewFile.DragEnter += new DragEventHandler(listViewFile_DragEnter);
            toolComboBoxExt.DropDownStyle = ComboBoxStyle.DropDownList;
            toolComboBoxView.DropDownStyle = ComboBoxStyle.DropDownList;
            toolComboBoxView.ComboBox.DataSource = Enum.GetValues(typeof(View));
            #endregion
        }

        #region FormLoad
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            AnimateWindow(this.Handle, 1000, 0x20010);   // 居中逐渐显示。
        }
        #endregion

        #region FormClosing
        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            base.OnFormClosing(e);
            AnimateWindow(this.Handle, 1000, 0x10010);    // 居中逐渐隐藏。
        }
        #endregion

        #region DateTimeFormatInfo
        private void timerInfo_Tick(object sender, EventArgs e)
        {
            Application.CurrentCulture.ClearCachedData();
            DateTime solar = DateTime.Now;
            int month = lunarCalendar.GetMonth(solar);
            int leapMonth = lunarCalendar.GetLeapMonth(lunarCalendar.GetYear(solar));
            if (0 < leapMonth && leapMonth <= month)
                --month;
            statusLabelTime.Text = string.Format("{0:F} [{1} {2:00}]", solar, DateTimeFormatInfo.CurrentInfo.MonthNames[month - 1], lunarCalendar.GetDayOfMonth(solar));
        }
        #endregion

        #region LoadItems
        private void listViewFile_DragEnter(object sender, DragEventArgs e)
        {
            DataObject data = e.Data as DataObject;
            if (data.ContainsFileDropList())
            {
                DirectoryInfo dir = new DirectoryInfo(data.GetFileDropList()[0]);
                if ((dir.Attributes & FileAttributes.Directory) != 0)
                    LoadFiles(dir);
            }
        }

        private void LoadFiles(DirectoryInfo dir)
        {
            toolComboBoxExt.Items.Clear();
            imageListFile.Images.Clear();
            listViewFile.Groups.Clear();
            listViewFile.Items.Clear();
            listViewFile.BeginUpdate();
            Environment.CurrentDirectory = this.Text = dir.FullName; // 设置当前工作目录。
            var query = from info in dir.GetFiles()
                        let Extension = info.Extension.ToLowerInvariant()
                        let Hidden = info.Attributes & FileAttributes.Hidden
                        where Hidden == 0
                        group info by Extension into Groups
                        orderby Groups.Key ascending
                        select Groups; // 根据文件扩展名分组排序。
            foreach (var files in query)
            {
                toolComboBoxExt.Items.Add(files.Key);
                imageListFile.Images.Add(files.Key, Icon.ExtractAssociatedIcon(files.First().Name));
                ListViewGroup group = listViewFile.Groups.Add(files.Key, files.Key);
                foreach (FileInfo info in files)
                {
                    ListViewItem item = listViewFile.Items.Add(info.Name, files.Key);
                    item.ToolTipText = string.Format("名称: {0}/n大小: {1:#,##0.00} KB/n修改日期: {2:yyyy-MM-dd HH:mm}", info.Name, info.Length / 1024M, info.LastWriteTime);
                    item.Group = group;
                }
            }
            listViewFile.EndUpdate();
        }

        private void toolButtonOpen_Click(object sender, EventArgs e)
        {
            if (folderBrowser.ShowDialog(this) == DialogResult.OK)
                LoadFiles(new DirectoryInfo(folderBrowser.SelectedPath));
        }
        #endregion

        #region View
        private void toolComboBoxView_SelectedIndexChanged(object sender, EventArgs e)
        {
            listViewFile.View = (View)toolComboBoxView.SelectedItem;
        }
        #endregion

        #region ReNaneFile
        private void toolTextBoxName_KeyPress(object sender, KeyPressEventArgs e)
        {
            foreach (char key in @"//:*?""<>|")
            {
                if (e.Handled = (e.KeyChar == key))
                    break;
            }
        }

        private void toolButtonName_Click(object sender, EventArgs e)
        {
            if (toolComboBoxExt.SelectedIndex < 0)
                return;
            foreach (ListViewItem item in listViewFile.Items)
            {
                string newName = string.Format("{0}[{1}]{2}", toolTextBoxName.Text, item.Index + 1, toolComboBoxExt.Text);
                if (File.Exists(newName))
                    continue;
                FileInfo info = new FileInfo(item.Text);
                if (info.Exists)
                {
                    info.MoveTo(newName);
                    item.Text = info.Name;
                    item.ToolTipText = string.Format("名称: {0}/n大小: {1:#,##0.00} KB/n修改日期: {2:yyyy-MM-dd HH:mm}", info.Name, info.Length / 1024M, info.LastWriteTime);
                }
                else
                    item.Remove();
            }
        }

        private void toolComboBoxExt_SelectedIndexChanged(object sender, EventArgs e)
        {
            listViewFile.Items.Clear();
            listViewFile.BeginUpdate();
            DirectoryInfo dir = new DirectoryInfo(Environment.CurrentDirectory);
            foreach (FileInfo info in dir.GetFiles("*" + toolComboBoxExt.Text))
            {
                ListViewItem item = listViewFile.Items.Add(info.Name, toolComboBoxExt.Text);
                item.ToolTipText = string.Format("名称: {0}/n大小: {1:#,##0.00} KB/n修改日期: {2:yyyy-MM-dd HH:mm}", info.Name, info.Length / 1024M, info.LastWriteTime);
                item.Group = listViewFile.Groups[toolComboBoxExt.Text];
            }
            listViewFile.EndUpdate();
        }
        #endregion
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值