C# 读取列表视图的内容,并根据目录的内容在另一个列表视图中显示缺少的项
我有一个.NET webform,它显示在listView目录中找到的文件。这是显示屏的代码: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) {
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);
}