情景如下:
我正在为我的网站写一个Windows服务。它的使命是每天都这样做:
它应该从数据库中获取已保存图像的列表,并将其设置为列表A
。并获取上传到服务器的文件列表,并将其设置为列出B
。
我知道A.Count()总是< =而不是b.Count()。
它应删除列表B
中但不存在于列表A
中的上传文件。
现在我有两个问题:
domain.com
;如何从Windows服务中获取Images
文件夹?B
区分列表A
以找出应删除哪些图片?答案 0 :(得分:4)
使用linq,这应该如下:
var toDeleteList=listB.Except(listB.Intersect(listA));
<强>更新强>
刚刚发现了一种更精确的方式:
var toDeleteList=listB.Except(listA);
答案 1 :(得分:1)
创建比较器类。它将包含文件的参数,你要比较(在我的情况下名称和大小)。然后将上传文件的数据上传到某个数据表并将其链接到文件列表。将文件系统中的文件加载到另一个列表中。并使用Victor Mukherjee aproach找到结果列表。
您的文件类:
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));