c#拖拽获取所有文件

网上都写了很多的了, 我mark一下,方便查找。

1.先遍历文件夹,获取所有文件。

        //遍历获取该路径下的所有文件
        static void GetAllFiles(string dir, List<string> files)
        {
            DirectoryInfo d = new DirectoryInfo(dir);
            FileSystemInfo[] fsInfos = d.GetFileSystemInfos();
            foreach (FileSystemInfo fsInfo in fsInfos)
            {
                if (fsInfo is DirectoryInfo)     //判断是否为文件夹
                {
                    GetAllFiles(fsInfo.FullName, files);//递归调用
                }
                else
                {
                    // Console.WriteLine(fsInfo.FullName);//输出文件的全部路径
                    files.Add(fsInfo.FullName);
                }
            }
        }

2.拖拽事件:

窗体或者控件:AllowDrop属性必须设置成true;且必须有DragEnter事件(单独写DragDrop事件是不会具有拖拽功能的)。

private void lv_upload_DragDrop(object sender, DragEventArgs e)
        {
             if (!tb_PathDes.Text.EndsWith("/"))
            {
                tb_PathDes.Text += "/";
            }

            lv_upload.Items.Clear();

            string path_src, path_des;
         
            string[] al = (string[])e.Data.GetData(DataFormats.FileDrop, true);
            int iCount = 1;
            for (int i = 0; i < al.Length; i++)
            {
                ListViewItem lviTmp = new ListViewItem();
                path_src = al[i].ToString();

                //文件夹,则遍历
                if (Directory.Exists(path_src))
                {
                    List<string> files = new List<string>();
                    GetAllFiles(path_src, files);

                    foreach (string filePath in files)
                    {
                        lviTmp = new ListViewItem();
                        lviTmp.Text = (iCount++).ToString(); //序号
                        lviTmp.SubItems.Add(Path.GetExtension(filePath)); //扩展名

                        lviTmp.SubItems.Add(string.Empty); //目标路径
                        lviTmp.SubItems.Add(filePath); //源文件路径

                        lv_upload.Items.Add(lviTmp);
                    }
                }
                else
                {
                    lviTmp = new ListViewItem();
                    lviTmp.Text = (iCount++).ToString(); //序号
                    lviTmp.SubItems.Add(Path.GetExtension(path_src)); //扩展名

                    lviTmp.SubItems.Add(string.Empty); //目标路径
                    lviTmp.SubItems.Add(path_src); //源文件路径

                    lv_upload.Items.Add(lviTmp);
                }
            }
        }

3.窗体或者控件的DragEnter事件:

        private void lv_upload_DragEnter(object sender, DragEventArgs e)
        {
            //获取信息
           if (e.Data.GetDataPresent(DataFormats.FileDrop))
              e.Effect = DragDropEffects.All; //重要代码:表明是所有类型的数据,比如文件路径                                                                     else
                e.Effect = DragDropEffects.None;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值