0

场景是这样的:

我正在为我的网站编写 Windows 服务。它的使命是每天都这样做:

它应该从数据库中获取已保存图像的列表并将其设置为 list A。并且还获取上传到服务器的文件列表并将其设置为 list B

我知道 A.Count() 总是 <= 比 b.Count()。

它应该删除那些存在于 listB但不存在于 list的上传文件A

现在我有两个问题:

  1. 想象一下我的域是domain.com;如何Images从 Windows 服务中获取其中的文件夹?
  2. 如何B根据列表区分列表A以找到应该删除哪些图像?
4

2 回答 2

4

使用 linq,应该如下所示:

var toDeleteList=listB.Except(listB.Intersect(listA));

更新:

刚刚发现了一种更精确的方法:

var toDeleteList=listB.Except(listA);
于 2013-10-18T07:09:34.533 回答
1

创建您的比较器类。它将包含您想要比较的文件的参数(在我的例子中是名称和大小)。然后将数据与您上传的文件一起上传到某个数据表并将其 linq 到文件列表。将文件从文件系统加载到另一个列表。并使用 Victor Mukherjee 方法查找结果列表。

你的文件类:

class UniqeFile
{
   public string FileName;
   public long Length;
}

你的代码:

DataTable yourDataTable;
DateTime yourBeginDateTime, yourEndDateTime;

var listA = new DirectoryInfo("yourPath").GetFiles().Where(fl => fl.CreationTime >= yourBeginDateTime && fl.CreationTime >= yourEndDateTime).Select(fl => new UniqeFile() { FileName = fl.Name, Length = fl.Length }).ToList();

var listB = yourDataTable.Select().Select(dr => new UniqeFile() { FileName = dr["fileName"].ToString(), Length = long.Parse(dr["fileSize"].ToString()) }).ToList();

var ListC = listB.Except(listB.Intersect(listA));
于 2013-10-18T07:45:23.677 回答