文件夹遍历及提取

关于某一路径下所有文件的遍历提出,随后复制或进行剪切的简单实例

目的:

找到系统中特定类型的某些文件,随后选中保存于listbox中,选中系统中某个已存在路径,将文件复制或剪切到该路径中
一,页面设置。
(需要两个textbox,两个button,一个listbox)
在这里插入图片描述
2查找遍历查询的初始路径,设置button1的click事件

private void button1_Click(object sender, EventArgs e)
        {
            SaveFileDialog s1 = new SaveFileDialog();
            s1.Title = "遍历位置";
            s1.Filter = "遍历位置(*.)|*." ;
            s1.FilterIndex = 1;
            s1.FileName = "从此处遍历";
            if (
                s1.ShowDialog() == DialogResult.OK)
            {
            }
            textBox1.Text = Path.GetDirectoryName(s1.FileName).ToString();   
            }

3从初始位置开始遍历
插入list保存遍历到的文件,编写函数进行遍历

 public static List<string> Wenjian = new List<string>();
        public static void Director(string dir)
        {
            DirectoryInfo d = new DirectoryInfo(dir);
            FileSystemInfo[] fsinfos = d.GetFileSystemInfos();
            foreach (FileSystemInfo fsinfo in fsinfos)
            {
                if (fsinfo is DirectoryInfo)     //判断是否为文件夹
                {
                    Director(fsinfo.FullName);//递归调用
                }
                else
                {
                    Wenjian.Add(fsinfo.FullName);
                }
            }
        }

4,将wenjian中保存的路径插入到listbox中,在button1的click事件中在最后插入如下代码。

            Director(textBox1.Text);
            for(int a=0;a<Wenjian.Count;a++)
            {
                listBox1.Items.Add(Wenjian[a]);
            }

5选择保存的文件的路径
设置button2的click事件如下:

 private void button2_Click(object sender, EventArgs e)
            {
            SaveFileDialog s1 = new SaveFileDialog();
            s1.Title = "保存文件位置";
            s1.Filter = "位置文件(*.)|*.";
            s1.FilterIndex = 1;
            s1.FileName = "存放于此处";
            if (
                s1.ShowDialog() == DialogResult.OK)
            {
            }
            textBox2.Text = Path.GetDirectoryName(s1.FileName).ToString();
            }

6,将listbox中保存路径的文件进行复制或进行剪切
创建函数进行复制或剪切:

 public void CopyToFileTianhouzhui(string sourceName, string folderPath)
        {
            /* 假设sourceName为D:\try\尝试.txt
               Path.GetFileNameWithoutExtension(sourceName);得到尝试
                Path.GetExtension(sourceName);得到.txt
                Path.GetFileName(sourceName);得到尝试.txt
                Path.GetDirectoryName(sourceName); 得到D:\try
                string newPath = Path.ChangeExtension(sourceName, "doc");//更改文件扩展名为doc也即D:\try\尝试.doc
            */
            string fileName = Path.GetFileName(sourceName);
            //目标整体路径
            string targetPath = Path.Combine(folderPath, fileName);
            //如果路径下存在当前文件
            if (System.IO.File.Exists(targetPath))
            {
                //改变文件名的方式
                for (int a = 1; a < 100000; a++)
                {
                    fileName = string.Format("{0}({1}){2}", Path.GetFileNameWithoutExtension(sourceName), a, Path.GetExtension(sourceName));//如果加一万个数字后缀还是有同名文件,我认了,覆盖吧,我累了
                    targetPath = Path.Combine(folderPath, fileName);
                    //到了不存在同名时跳出
                    if (!System.IO.File.Exists(targetPath))
                        break;
                }
            }
            FileInfo file = new FileInfo(sourceName);
            file.CopyTo(targetPath, true);//复制source至targetPath
            //file.MoveTo(targetPath);//剪切source至targetPath
                }

调用函数实现剪切或复制
在button2的click事件内代码末尾添加如下代码:

  while (listBox1.Items.Count > 0)
            {
                string source = listBox1.Items[0].ToString();              
                CopyToFileTianhouzhui(@source, textBox2.Text );
                listBox1.Items.Remove(listBox1.Items[0]);
                label1.Text = listBox1.Items.Count.ToString();
            }

完成原定目地

使用

运行程序后点击button1,在saveFileDialog中选择遍历路径,确认后,textbox1中会出现遍历的初始目录,listbox中会出现遍历到的所有文件的路径,
点击button2,在saveFileDIalog中选择保存文件的路径,确认后,textbox2中出现保存文件的路径,同时按照复制函数的不同进行粘贴或剪切,同时listbox中的路径不断被移除。

简单的扩展的想法

1实时显示listbox中的路径数量,
2对粘贴或剪切可以进行选择
3可以对遍历的文件的后缀名做出一定的约束
4设置button2在误触情况下的反应而不至于卡出程序。
5对listbox添加选中增删及全部清空操作。
6是否需要让程序取得管理员的权限来浏览目录及文件,推荐文章https://www.cnblogs.com/Interkey/p/RunAsAdmin.html
7界面的优化
注:本例中的复制文件函数以及遍历函数来自优快云中的他人,很抱歉没有记录准确来源,抱歉。如有发现来源的请留言链接,谢谢

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值