网上都写了很多的了, 我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;
}