array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 WPF拖拽文件(拖入拖出),监控拖拽到哪个位置,类似百度网盘拖拽 - 爱码网

1.往wpf中拖文件

// xaml
<Grid x:Name="grid_11" DragOver="Grid_11_DragOver" Drop="Grid_11_Drop" AllowDrop="True" Background="Red"/>
// xaml.cs
/// <summary>
/// 包含目录文件判断
/// </summary>
/// <param name="files"></param>
/// <returns></returns>
private bool HasDirectory(string[] files)
{
    if (files == null)
        return false;
    for (int i = 0; i < files.Length; i++)
    {
        if (System.IO.Directory.Exists(files[i]))
        {
            return true;
        }
    }
    return false;
}
/// <summary>
/// 抛弃文件夹目标
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Grid_11_DragOver(object sender, DragEventArgs e)
{
    var files = (string[])e.Data.GetData(DataFormats.FileDrop);
    if (HasDirectory(files))
    {
        e.Effects = DragDropEffects.None;// 抛弃这一次的拖拽源
        e.Handled = true;
    }
}
/// <summary>
/// 放下文件获取路径
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Grid_11_Drop(object sender, DragEventArgs e)
{
    var files = (string[])e.Data.GetData(DataFormats.FileDrop);
    if (files == null || HasDirectory(files))
        return;
    for(int i = 0; i < files.Length; i++)
    {
        Console.WriteLine(files[i]);
    }
}

2.wpf中往外拖文件

private void Button_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)// 右键拖拽的时候,创建一个drop源
{
    // 多文件拖拽
    #region 获取拖拽的文件的个数
    int fileCount = 1;
    #endregion

    FileDDWatcher.Instance.StartWatcher(fileCount);// 启动文件挪移监控,传入文件挪移的个数

    #region 创建临时文件并反馈临时路径,paths挪移的目标

    string dir = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "TempDirectory");
    if (!System.IO.Directory.Exists(dir))
    {
        System.IO.Directory.CreateDirectory(dir);
    }
    string[] paths = new string[fileCount];
    for (int i = 0; i < fileCount; i++)
    {
        string path = System.IO.Path.Combine(dir, $"fileName{i}.download");
        System.IO.File.Create(path).Close();// 拖动的时候创建
        paths[i] = path;
    }
    #endregion

    #region 拖拽代码

    ListView lv = new ListView();
    string dataFormat = DataFormats.FileDrop;
    DataObject dataObject = new DataObject(dataFormat, paths);//(listview.SelectedItems.Cast<string>()).ToArray<string>());
    DragDropEffects dde = DragDrop.DoDragDrop(lv, dataObject, DragDropEffects.Copy);

    #endregion

    FileDDWatcher.Instance.StopWatcher();// 停止文件监控

    #region 拖拽成功之后获取目标的路径
    Console.WriteLine($"dropdrag status = {dde}");
    if (dde == DragDropEffects.Copy)// 拖拽成功
    {
        string[] ls = FileDDWatcher.Instance.GetTempFilePath();// 获取拖拽之后的目录
        if (ls != null && ls.Length > 0)
        {
            for (int i = 0; i < ls.Length; i++)
            {
                Console.WriteLine($"Target catalogue {ls[i]}");
            }
        }
        else
        {
            Console.WriteLine("no file path copy");
        }
    }
    #endregion
}

 

监控文件的代码

public class FileDDWatcher
{
    #region property && fileds

    private Hashtable tempWatchers = null;
    private Queue<string> pathQueue = new Queue<string>();
    private int moveFileCount = 0;

    #endregion

    #region instance
    private static object ooo = new object();
    private static FileDDWatcher _instance;
    public static FileDDWatcher Instance
    {
        get
        {
            lock (ooo)
            {
                if (_instance == null)
                {
                    _instance = new FileDDWatcher();
                }
                return _instance;
            }
        }
    }
    private FileDDWatcher() { }
    #endregion

    #region method

    #region private

    /// <summary>
    /// 文件监控触发的事件
    /// </summary>
    /// <returns></returns>       
    private void OnCreated(object source, FileSystemEventArgs e)
    {
        string path = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "TempDirectory");
        if (e.FullPath.Contains(path))
        {
            return;
        }
        pathQueue.Enqueue(e.FullPath);
    }

    #endregion

    #region public

    /// <summary>
    /// 启动文件监控,传入移动文件的个数,默认是1个
    /// </summary>
    /// <returns></returns>
    public bool StartWatcher(int fileCount = 1)
    {
        LogHelper.WriteInfo("StartWatcher");
        try
        {
            moveFileCount = fileCount;
            int i = 1;
            if (tempWatchers == null || tempWatchers.Count <= 0)
            {
                tempWatchers = new Hashtable();
                foreach (string driveName in Directory.GetLogicalDrives())
                {
                    if (Directory.Exists(driveName))
                    {
                        FileSystemWatcher watcher = new FileSystemWatcher();
                        watcher.Filter = "*.download";
                        watcher.NotifyFilter = NotifyFilters.FileName;
                        watcher.Created -= OnCreated;
                        watcher.Created += OnCreated;
                        watcher.IncludeSubdirectories = true;// 必须要的,监控子集目录
                        watcher.Path = driveName;
                        LogHelper.WriteInfo(driveName);
                        watcher.EnableRaisingEvents = true;
                        tempWatchers.Add("file_watcher" + i.ToString(), watcher);
                        i++;
                    }
                }
            }
            return true;
        }
        catch (Exception ex)
        {
            LogHelper.WriteError(ex.Message);
            return false;
        }
    }
    /// <summary>
    /// 停止文件监控,如果队列中路径数量和文件移动数量一致,就不重置文件传输个数
    /// </summary>
    /// <returns></returns>
    public bool StopWatcher()
    {
        try
        {if (tempWatchers != null && tempWatchers.Count > 0)
            {
                LogHelper.WriteInfo(tempWatchers.Count + "");
                for (int i = 1; i <= tempWatchers.Count; i++)
                {
                    ((FileSystemWatcher)tempWatchers["file_watcher" + i.ToString()]).Dispose();
                }
                tempWatchers.Clear();
                tempWatchers = null;
            }
            return true;
        }
        catch (Exception ex)
        {
            return false;
        }
        finally
        {
            moveFileCount = 0;
        }
    }
    /// <summary>
    /// 返回文件保存的路径
    /// </summary>
    /// <returns></returns>
    public string[] GetTempFilePath()
    {
        try
        {
            int length = pathQueue.Count;
            if (length <= 0)
            {
                return new string[0];
            }

            string[] ls = new string[length];
            for (int i = 0; i < length; i++)
            {
                ls[i] = pathQueue.Dequeue();
            }
            return ls;
        }
        catch (Exception ex)
        {
            return new string[0];
        }
        finally
        {
            moveFileCount = 0;
        }
    }
    #endregion

    #endregion
}

 

相关文章:

  • 2019-11-21
  • 2019-12-29
  • 2018-04-16
  • 2019-01-05
  • 2021-12-09
  • 2018-01-06
  • 2021-10-26
  • 2020-06-10
猜你喜欢
  • 2017-11-22
  • 2018-07-26
  • 2018-03-28
  • 2018-11-27
  • 2018-03-11
  • 2020-03-15
  • 2019-02-28
  • 2017-11-23
相关资源
相似解决方案