Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Treeview复选框选中了C中listview中的文件和文件夹加载#_C#_Treeview - Fatal编程技术网

C# Treeview复选框选中了C中listview中的文件和文件夹加载#

C# Treeview复选框选中了C中listview中的文件和文件夹加载#,c#,treeview,C#,Treeview,我想做一个审计工具,旨在复制文件和文件夹 我使用treeview使用递归方法加载文件和文件夹,但当treeview检查listview中的文件和文件夹加载时,这需要大量时间(2GB需要21分钟)。这是个问题 如何在最短的时间内将文件和文件夹从treeview加载到listview,以实现更快的计算 这是我的密码: private void btnAddToListViewCheckedItem_Click(object sender, EventArgs e) { foreach (Tr

我想做一个审计工具,旨在复制文件和文件夹

我使用treeview使用递归方法加载文件和文件夹,但当treeview检查listview中的文件和文件夹加载时,这需要大量时间(2GB需要21分钟)。这是个问题

如何在最短的时间内将文件和文件夹从treeview加载到listview,以实现更快的计算

这是我的密码:

private void btnAddToListViewCheckedItem_Click(object sender, EventArgs e)
{
    foreach (TreeNode tn in tvLoadTreeviewFromListView.Nodes)
    {

        AddToListView(tn);
    }
}

private void AddToListView(TreeNode tn)
{

    {

        FileInfo file = new FileInfo(tn.Text);

        string[] suffix = { "B", "KB", "MB", "GB", "TB" };
        if (file.Exists)
        {
            int s = 0;
            long size = file.Length;
            while (size >= 1024)
            {
                NO_OF_FILES += 1;
                s++;
                size /= 1024;
            }



            String countFileSize = string.Format("{0}{1}", size, suffix[s]);


            ListViewItem item = lvLoadSelectedFileAndFolder.Items.Add(file.Name);

            item.ImageIndex= sysIcons.GetIconIndex(tn.Text);
            item.SubItems.Add(tn.Text);
            item.SubItems.Add(countFileSize);

        }

        foreach (TreeNode tnx in tn.Nodes)
        {


            for (int i = 0; i < lvLoadSelectedFileAndFolder.Items.Count; i++)
            {
                int ii = 1;
                if (tnx.Text == lvLoadSelectedFileAndFolder.Items[i].SubItems[ii].Text)
                {
                    return;

                }
            }


            if (tnx.Checked)
            {

                AddToListView(tnx);
            }

        }
    }
    catch (Exception ){}

}
private void btnAddToListViewCheckedItem\u单击(对象发送方,事件参数e)
{
foreach(TvLoadTreeView.Nodes中的TreeNode tn)
{
AddToListView(tn);
}
}
私有void AddToListView(TreeNode tn)
{
{
FileInfo file=新的FileInfo(tn.Text);
字符串[]后缀={“B”、“KB”、“MB”、“GB”、“TB”};
如果(file.Exists)
{
int s=0;
long size=file.Length;
而(大小>=1024)
{
_文件的数量+=1;
s++;
大小/=1024;
}
String countFileSize=String.Format(“{0}{1}”,大小,后缀[s]);
ListViewItem item=lvLoadSelectedFileAndFolder.Items.Add(file.Name);
item.ImageIndex=sysIcons.GetIconIndex(tn.Text);
项目.子项目.添加(tn.Text);
item.SubItems.Add(countFileSize);
}
foreach(tn.Nodes中的TreeNode tnx)
{
对于(int i=0;i
您的
后缀
数组基本上是一个常量,但每次
AddToListView
处理存在的文件名时,都会在堆上重新分配。此外,在加载listview时暂停UI更新。试试这个

const string[] suffix = { "B", "KB", "MB", "GB", "TB" };

private void btnAddToListViewCheckedItem_Click(object sender, EventArgs e)
{
    try
    {
        lvLoadSelectedFileAndFolder.BeginUpdate();
        foreach (TreeNode tn in tvLoadTreeviewFromListView.Nodes)
        {
            AddToListView(tn);
        }
    }
    finally
    {
        lvLoadSelectedFileAndFolder.EndUpdate();
    }
}

谢谢但是我无法访问
lvLoadSelectedFileAndFolder.Items.BeginUpdate()属性。可以访问
lvLoadSelectedFileAndFolder.BeginUpdate()属性。。有需要写入的方法吗?抱歉,这些方法位于
ListView
上,而不是
Items
属性上。我已经更正了代码。