Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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# 读取列表视图的内容,并根据目录的内容在另一个列表视图中显示缺少的项_C#_.net_Listview - Fatal编程技术网

C# 读取列表视图的内容,并根据目录的内容在另一个列表视图中显示缺少的项

C# 读取列表视图的内容,并根据目录的内容在另一个列表视图中显示缺少的项,c#,.net,listview,C#,.net,Listview,我有一个.NET webform,它显示在listView目录中找到的文件。这是显示屏的代码: private void files() { try { DirectoryInfo dinfo = new DirectoryInfo(label2.Text); FileInfo[] Files = dinfo.GetFiles("*.doc"); foreach (FileInfo file in Files) {

我有一个.NET webform,它显示在listView目录中找到的文件。这是显示屏的代码:

private void files()
{
    try
    {
        DirectoryInfo dinfo = new DirectoryInfo(label2.Text);
        FileInfo[] Files = dinfo.GetFiles("*.doc");
        foreach (FileInfo file in Files)
        {
            listView1.Items.Add(file.Name);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
Text包含存放文件的目录。我需要的是第二个列表视图显示另一个目录中的文档列表,如果该文件没有出现在第一个列表视图中,则显示该列表

第二个目录包含模板,其中第一个目录包含完整的文档。每个目录中的名称不同,但它们是相似的。例如,在第一个列表视图中显示的完整文档可以称为DEFECT1_AA09890.doc。它的模板可以称为05DEFECT.doc

使用以下代码很容易显示模板目录的内容:

private void templateDocuments()
{
    string path = @"\\directoryname\foldername";

    try
    {
        DirectoryInfo dinfo = new DirectoryInfo(path);
        FileInfo[] Files = dinfo.GetFiles("*.doc");
        foreach (FileInfo file in Files)
        {
            listView2.Items.Add(file.Name);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
但这不会根据结果比较内容和显示

长话短说,我想在listView中显示一个目录的内容,将其与另一个目录的内容进行比较,并在第二个listView中显示第一个目录中未显示的内容

任何帮助都将不胜感激。

干杯。

在将文件名添加到
列表视图2
之前,您需要检查是否已将其添加到
列表视图1
。一种方法是将文件存储在
哈希集中的
列表视图1
中,然后在添加到
列表视图2
之前进行检查。像这样的方法应该会奏效:

private void filesAndTemplates()
{
    string path = @"\\directoryname\foldername";
    HashSet<string> files = new HashSet<string>();

    try
    {
        DirectoryInfo dinfo = new DirectoryInfo(label2.Text);
        FileInfo[] Files = dinfo.GetFiles("*.doc");
        foreach (FileInfo file in Files)
        {
            files.Add(file.Name);
            listView1.Items.Add(file.Name);
        }

        dinfo = new DirectoryInfo(path);
        Files = dinfo.GetFiles("*.doc");
        foreach (FileInfo file in Files)
        {
            if (files.Contains(file.Name))
            {
                continue; // We already saw this file
            }

            listView2.Items.Add(file.Name);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
然后,在将文件添加到
HashSet
之前以及在检查文件是否存在之前,修改原始方法以转换文件名:

DirectoryInfo dinfo = new DirectoryInfo(label2.Text);
FileInfo[] Files = dinfo.GetFiles("*.doc");
foreach (FileInfo file in Files)
{
    files.Add(Transform(file.Name)); // Here!
    listView1.Items.Add(file.Name);
}

dinfo = new DirectoryInfo(path);
Files = dinfo.GetFiles("*.doc");
foreach (FileInfo file in Files)
{
    if (files.Contains(Transform(file.Name))) // Here!
    {
        continue;
    }

    listView2.Items.Add(file.Name);
}

请注意对
Transform

的两个调用,据我所知,您需要两个listview,在list1中您需要一个目录中的内容,在list2中您也需要另一个目录中的内容,但只需要那些不在list1中的内容…??是的,这是一个很难解释的问题。ListView2显示包含模板文档的目录的内容。ListView1显示单独目录中的完整文档。我只想在ListView2中显示ListView1中未使用的模板文档。换句话说,ListView2将显示未填写的模板,ListView1将显示已填写的模板。因此ListView2读取ListView1中的内容,并根据目录内容显示不存在的文档。谢谢Petter,但是如果列表1中有类似的文件,有没有办法将其设置为不显示该文件?例如,列表1有一个名为PRE-INSPECT_A03345.doc的文件,因此我不希望列表2显示01PRE-INSPECT.doc。谢谢您,它运行得非常好。
DirectoryInfo dinfo = new DirectoryInfo(label2.Text);
FileInfo[] Files = dinfo.GetFiles("*.doc");
foreach (FileInfo file in Files)
{
    files.Add(Transform(file.Name)); // Here!
    listView1.Items.Add(file.Name);
}

dinfo = new DirectoryInfo(path);
Files = dinfo.GetFiles("*.doc");
foreach (FileInfo file in Files)
{
    if (files.Contains(Transform(file.Name))) // Here!
    {
        continue;
    }

    listView2.Items.Add(file.Name);
}