例如有个表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中的图片以外的所有文件

解决方案 »

  1.   

    楼上的,这样速度不但慢,而且还可能出错= =,我上面只列出个例子,其实目录里面是有上万张图片的,当然对应的数据也有上万条更正一下,打错字了:怎么实现删image目录中除link表中的img_1、img_2中记录的图片以外的所有文件
      

  2.   

    using System.IO;string UpFile = Server.MapPath(@"../UpLoadFolder/UpFile/" + xx.gif);
                if (File.Exists(UpFile))
                {
                    File.Delete(UpFile);
                }
      

  3.   

    枚举image目录中的文件
    检查在link表是否存在,不存在则删除
      

  4.   

    这个问题并不难,只不过怎么做速度才能更快一些
    建议把数据库中img1、img2涉及的所有文件放到个链表中,这样就只进行一次数据库操作
    然后遍历文件时查找链表中有没有这个文件。
    当然链表也可以换成数组或其他格式存储,大家可以谈一下哪种更快一些。
      

  5.   

    首先读取数据库中的link 表,遍历每一条记录,把 img_1 , img_2对应的文件复制到与image同级的bak目录,相对路径不变。
    比如,image/2008/logo.gif  -->  bak/2008/logo.gif  
    然后删除image目录。
    最后重命名bak目录为image目录。bak --> image
      

  6.   

    假设数据库有n条记录,image文件夹下有m个文件(m>=n)。
    数据库中的记录假设一次读取到内存中。方法一:遍历image下每个文件,逐一检查是否存在于数据库记录中。
    1次数据库 + m * n + (m-n)次文件删除操作。方法二:15楼的方法。
    1次数据库 + n次文件复制 + 1次目录删除 + 1次目录重命名考虑到文件复制比文件删除慢,所以没经过测试,还是不能简单的说哪个方法就快。
      

  7.   

    也是觉得将LIK保存起来删除整个文件会快些
      

  8.   

    1、将image目录改名,并新建image目录
    2、得到不重复的link表中的img_1、img_2中的图片文件名
    3、循环移动到image目录
    4、删除改名后的目录如果想不影响前台的话,就用复制,这样会慢点