例如有个表link
id img_1 img_2
1 image/2008/logo.gif image/2007/logo.gif
1 image/logo.gif image/photo/logo.gif怎么实现删除image目录中除link表中的img_1、img_2中的图片以外的所有文件
id img_1 img_2
1 image/2008/logo.gif image/2007/logo.gif
1 image/logo.gif image/photo/logo.gif怎么实现删除image目录中除link表中的img_1、img_2中的图片以外的所有文件
if (File.Exists(UpFile))
{
File.Delete(UpFile);
}
检查在link表是否存在,不存在则删除
建议把数据库中img1、img2涉及的所有文件放到个链表中,这样就只进行一次数据库操作
然后遍历文件时查找链表中有没有这个文件。
当然链表也可以换成数组或其他格式存储,大家可以谈一下哪种更快一些。
比如,image/2008/logo.gif --> bak/2008/logo.gif
然后删除image目录。
最后重命名bak目录为image目录。bak --> image
数据库中的记录假设一次读取到内存中。方法一:遍历image下每个文件,逐一检查是否存在于数据库记录中。
1次数据库 + m * n + (m-n)次文件删除操作。方法二:15楼的方法。
1次数据库 + n次文件复制 + 1次目录删除 + 1次目录重命名考虑到文件复制比文件删除慢,所以没经过测试,还是不能简单的说哪个方法就快。
2、得到不重复的link表中的img_1、img_2中的图片文件名
3、循环移动到image目录
4、删除改名后的目录如果想不影响前台的话,就用复制,这样会慢点