急求大侠关于从ListView拖拽文件到电脑桌面的有关问题,万分感谢

急求大侠关于从ListView拖拽文件到电脑桌面的问题,万分感谢!
我用ListView绑定了我本地的一些图片文件,我想实现从ListView里拖动某一项的图片文件到电脑桌面上,实现将图片文件复制到电脑桌面的功能,我在实现拖动的时候,发现无法拖动文件到电脑桌面上。请教该怎么写啊?

获取本地文件并绑定到ListView

public static void LoadDirectory(string path, TreeNode node)
        {
            if (string.IsNullOrEmpty(path) || !Directory.Exists(path))
            {
                return;
            }
            string[] directories = Directory.GetDirectories(path, "*", SearchOption.TopDirectoryOnly);
            string[] files = Directory.GetFiles(path);
            int diretoryLength = directories.Length;
 
            for (int i = 0; i < diretoryLength; i++)
            {
                node.Nodes.Add(directories[i]);
 
                LoadDirectory(directories[i], node.Nodes[i]);
            }
        }
 
public static void LoadFiles(string path, ListView lv,ImageList images)
        {
            if (string.IsNullOrEmpty(path) || !Directory.Exists(path))
            {
                return;
            }
            string[] files = Directory.GetFiles(path);
            int index = 0;
            lv.Items.Clear();
            images.Images.Clear();
 
            foreach (string file in files)
            {
                string fileName = Path.GetFileName(file);
                string filePath = Path.GetDirectoryName(file);
                string fileExt = Path.GetExtension(file);
                string prefixFileName = Path.GetFileNameWithoutExtension(file);
                if (fileExt.Equals(".jpg"))
                {
                    Image image = Image.FromFile(file);
                    images.Images.Add(image);
                    ListViewItem listViewItem = new ListViewItem();
                    listViewItem.Text = fileName;
                    listViewItem.Tag = filePath + "/" + prefixFileName + ".max";
                    lv.Items.Add(listViewItem);
                    lv.Items[index].ImageIndex = index;
                    index++;
                    image.Dispose();
                    LoadFiles(file, lv, images);
                }
                 
            }
        }
 
private void btnBrowser_Click(object sender, EventArgs e)
        {
            FolderBrowserDialogEx folderBrowserDialog = new FolderBrowserDialogEx();
            folderBrowserDialog.Description = "素材资源所在目录";
            folderBrowserDialog.RootFolder = Environment.SpecialFolder.MyComputer;
             
            DialogResult result = folderBrowserDialog.ShowDialog();
            if (result == DialogResult.OK)
            {
                txtDirectory.Text = folderBrowserDialog.SelectedPath;
            }
 
            tvDirectory.Nodes.Clear();
            tvDirectory.Nodes.Add(new TreeNode("素材目录"));
 
            LoadDirectory(txtDirectory.Text, tvDirectory.Nodes[0]);
        }
 
        private void tvDirectory_AfterSelect(object sender, TreeViewEventArgs e)
        {
            string folder = tvDirectory.SelectedNode.Text;
             
            LoadFiles(folder, lvFiles, imageList1);
        }



拖动部分代码

 private void lvFiles_ItemDrag(object sender, ItemDragEventArgs e)
        {
                lvFiles.DoDragDrop(e.Item, DragDropEffects.Move);
        }
 
        private void lvFiles_DragDrop(object sender, DragEventArgs e)
        {
            bool flag = e.Data.GetDataPresent(DataFormats.FileDrop);
            if (flag)
            {
                e.Effect = DragDropEffects.Copy;
            }
            ListViewItem item = e.Data.GetData(typeof(ListViewItem)) as ListViewItem;
            string fileName = item.Text;
            string maxFileName = item.Tag.ToString();
        }
 
        private void lvFiles_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(typeof(ListViewItem)))
            {
                e.Effect = DragDropEffects.Move;
            }
        }

------解决思路----------------------
DragDrop.DoDragDrop可以通过合适的 DataObject去做这件事。第一,必须要拷贝文件出来,可以使用临时目录方法System.IO.Path.GetTempPath()进行文件拷贝。下一步创建包含所有文件路径的字符串数组,然后用如下代码:
string[] paths = ...;
DragDrop.DoDragDrop(this, new DataObject(DataFormats.FileDrop, paths),
                    DragDropEffects.Copy); 
实际上就是先实现将ListView中的数据转换成实际文件或者通过ListView找到实际文件,而进行DragDrop的实际上是文件数组。
------解决思路----------------------
lvFiles.DoDragDrop(e.Item, DragDropEffects.Move);

1、不能用Move,按你的描述应该是Copy

2、e.Item是什么我没有看,但你应该从e中获取被拖拽的 文件名(按你的描述该文件在本地已经是存在的),然后构造DataObject对象,想楼上那样 new DataObject(DataFormats.FileDrop, new string[]{ "文件名" }),DoDragDrop的第一个参数就是这样的DataObject对象。