图片服务器定期删除不用的文件,记一次数据库图片引用和服务器文件对比 删除未引用的服务器图片1...

2023-10-28

///

///要保存的文件路径///

///

///

private void btnSavePath_Click(objectsender, EventArgs e)

{

FolderBrowserDialog dialog= newFolderBrowserDialog();if (dialog.ShowDialog() ==DialogResult.OK)

{if (string.IsNullOrEmpty(dialog.SelectedPath)) { MessageBox.Show("路径不能为空"); return; }

lblTxtSavePath.Text=dialog.SelectedPath;

}

}///

///开始执行比对///

///

///

private void btnDo_Click(objectsender, EventArgs e)

{//要保存的txt文件名称

string txtFileName =txtSaveName.Text.Trim();if (txtFileName.Length <= 0) { MessageBox.Show("txt文件名称不能为空"); return; }if (!txtFileName.EndsWith(".txt")) txtFileName = lblTxtSavePath.Text + "\\" + txtFileName + ".txt";//当前查询截止的目录

string currPath = lblTxtSavePath.Text + "\\" + "currPath.txt";//要搜索的文件夹路径

string searchPaths =txtSearchPath.Text.Trim();if (searchPaths.Length <= 0) { MessageBox.Show("要搜索的文件夹路径不能为空"); return; }string[] searchPathArr = searchPaths.Split(',');//禁用当前按钮 防止重复执行

DisableFormControls();

Task.Factory.StartNew(()=>{//最终服务器上图片不在数据库中的路径

List imageTargetUrls = new List();//从数据库中读取 [Type='房源' OR Type='楼盘'] 的图片地址

DataTable dtUrl =GetData();if (dtUrl != null && dtUrl.Rows.Count > 0)

{//从要搜索的文件夹路径中找出所有的图片及其路径 key=路径 value=值//Dictionary imageDic = new Dictionary();

if (searchPathArr != null && searchPathArr.Length > 0)

{foreach (var path insearchPathArr)

{if(Directory.Exists(path))

{

getFile(path,".jpg.JPEG.PNG.bmp.png.GIF", dtUrl, txtFileName, currPath);

}

}

}

}

Invoke(new Action(() => { EnableFormControls(); MessageBox.Show(this, "执行完成"); }));

});

}///

///禁用当前窗口的可操作控件///

private voidDisableFormControls()

{

btnDo.Enabled= false;

btnSavePath.Enabled= false;

txtSaveName.Enabled= false;

txtSearchPath.Enabled= false;

}///

///启用当前窗口的可操作控件///

private voidEnableFormControls()

{

btnDo.Enabled= true;

btnSavePath.Enabled= true;

txtSaveName.Enabled= true;

txtSearchPath.Enabled= true;

}///

///从数据库获取数据///

private staticDataTable GetData()

{

DataTable dt= null;string str_sql_conn = ConfigurationManager.AppSettings["sql_connect_str"];using (SqlHelper conn = newSqlHelper(str_sql_conn))

{string sql_text = @"SELECT URL FROM dbo.T_Attachment WHERE Type='房源' OR Type='楼盘'";

dt= conn.ExecuteDs(sql_text, CommandType.Text, null).Tables[0];

}returndt;

}///

///获得目录下所有文件或指定文件类型文件(包含所有子文件夹)///记录当前查询截止的目录(防止程序崩溃 下次从这个地方重启)///查询当前目录是否在数据库中被引用///记录当前查询截止的文件地址(防止程序崩溃 下次从这个地方重启)///查询当前目录下的图片是否在数据库中被引用///记录未被数据库引用的图片的路径///

///

///

///

///

///

public static void getFile(string path, string extName, DataTable dtUrl, string txtFileName, stringcurrPath)

{try{//记录当前查到了哪个文件夹

File.AppendAllLines(currPath, new string[] { path });//判断当前路径是否在数据库中有引用 如果不存在 不需要判断当前目录下的子目录及子文件

string dictionaryLastName = path.Split(new string[] { "\\upload" }, StringSplitOptions.None)[1].Replace("\\", "/");if (!dtUrl.AsEnumerable().Any(s => s.Field("URL").ToLower().Contains(dictionaryLastName.ToLower())))

{

File.AppendAllLines(txtFileName,new string[] { path });return;

}string[] dir = Directory.GetDirectories(path); //文件夹列表

DirectoryInfo fdir = newDirectoryInfo(path);

FileInfo[] file=fdir.GetFiles();if (file.Length != 0 || dir.Length != 0) //当前目录文件或文件夹不为空

{foreach (FileInfo f in file) //显示当前目录所有文件

{//判断是否为图片

if (extName.ToLower().IndexOf(f.Extension.ToLower()) >= 0)

{//记录当前查到了哪个图片文件

File.AppendAllLines(currPath, new string[] { f.FullName });//判断当前文件是否在数据库中被引用

if (!dtUrl.AsEnumerable().Any(s => s.Field("URL").ToLower().Contains(f.Name.ToLower())))

{//数据库中不包含服务器上文件夹中的图片//记录下当前图片的路径

File.AppendAllLines(txtFileName, new string[] { f.FullName });

}

}

}foreach (string d indir)

{

getFile(d, extName, dtUrl, txtFileName,currPath);//递归

}

}

}catch(Exception ex)

{throwex;

}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图片服务器定期删除不用的文件,记一次数据库图片引用和服务器文件对比 删除未引用的服务器图片1... 的相关文章

  • STM32定时器——编码器模式采集EC11旋转编码器

    目录 一 EC11旋转编码器介绍 二 定时器编码器模式介绍 三 编码器初始化代码介绍 四 旋转EC11向串口发送数据 一 EC11旋转编码器介绍 EC11旋转编码器广泛用于车载DVD 车载导航 汽车影音上 常被人称为车载编码器 编码器主要用
  • Vue2中使用自定义指令

    在vue中 除了vue提供了一套内置的指令外 Vue 也允许注册自定义指令 用来配置重写某一项数据的方法 声明自定义指令 分为全局注册自定义指令 以及局部注册自定义指令 全局注册 为 Vue directive 接收两个参数 第一个参数为字
  • HADOOP调优与运维问题汇总

    一 Hadoop调优 1 调整操作系统打开文件描述符的上限 通过命令 ulimit a 可以看到所有系统资源参数 这里面需要重点设置的是 open files 和 max user processes 其它可以酌情设置 要永久设置资源参数
  • python 中 np.sum()函数 通俗易懂理解!

    查看我的另一篇博客更清晰 https blog csdn net goodshot article details 79709884 这一篇博客保证是我写的最清楚 最容易理解的博客 众所周知 sum不传参的时候 是所有元素的总和 这里就不说
  • AJAX的使用方式及教程

    1 概念 ASynchronous JavaScript And XML 异步的JavaScript 和 XML 1 异步和同步 客户端和服务器端相互通信的基础上 客户端必须等待服务器端的响应 在等待的期间客户端不能做其他操作 客户端不需要
  • 数据挖掘一些面试题总结(Data Mining)

    Data Mining试题 2011Alibaba数据分析师 实习 试题解析 一 异常值是指什么 请列举1种识别连续型变量异常值的方法 异常值 Outlier 是指样本中的个别值 其数值明显偏离所属样本的其余观测值 在数理统计里一般是指一组
  • Fastjson

    1 介绍 Fastjson是阿里巴巴的开源JSON解析库 它可以解析JSON格式的字符串 支持将Java Bean序列化为JSON字符串 也可以从JSON字符串反序列化到JavaBean 具有执行效率高的特点 应用范围广泛 Fastjson
  • (基础)选择器的语法

    1 什么是选择器 CSS选择器是CSS规则的第一部分 每个CSS规则都以一个选择器或一组选择器为开始 CSS 选择器即用于 查找 或选取 要设置样式的 HTML 元素的模式 选择器可以分为基础选择器 复合选择器 2 基本选择器 1 通配 通
  • SpringBoot应用程序的打包和部署 [学习笔记]

    传统Web应用打包部署时 通常会用War包的形式 然后将War包部署到Tomcat等服务器中 而Spring Boot应用是嵌入式Servlet容器 默认以Jar包形式进行打包部署的 而如果想要使用传统的War包形式打包部署 需要进行配置
  • WebKit中RefPtr和PassRefPtr的使用

    历史 WebKit中的许多对象是引用计数的 reference counted 采用的模式就是类具有ref和deref成员函数增加和减少引用计数 每个ref调用必须有一个deref与之匹配 当在引用计数值为1的对象上调用deref方法时 对
  • OSX 中为php安装 apc 扩展

    php中安装apc扩展 AndyMacBookPro log andy pecl install apc downloading APC 3 1 13 tgz Starting to download APC 3 1 13 tgz 171
  • Linux-docker下载docker-compose很慢、太慢、中断解决办法

    出现下一部分就断开的问题时 直接去github上下载后 传到虚机上 改个名字就可以 下载地址 https github com docker compose releases tag v2 2 2 2 2 2是对应版本 可修改 一般都是红框
  • RPA Uipath学习心得

    由于工作中存在大量繁琐的流程化事项 因此采用傻瓜机器人Uipath在后台处理 使得有更多时间去做创造性的工作 1 官网下载安装及教程 https www uipath com 2 基本操作步骤 首先是创建程序 然后调试运行 检查发布即可 3
  • MySQL全连接查询

    mysql没有全连接 但我们可以通过以下两种方式实现 1 使用union和left join实现全连接 select xxx 查询字段 from table1 left join table2 on xxx 连接条件 下同 where xx
  • LinuxMint上硬盘重装LinuxMint(理论上ubuntu也行)

    主要思路是通过修改引导程序 grub2 的配置文件 boot grub grub cfg 使计算机开机后引导硬盘中存放的系统镜像文件 iso 步骤 1 将下载好的系统镜像文件放入硬盘中一个不会被格式化的分区中 为了方便我直接放在了sda1的
  • C语言可以开发哪些项目?

    C语言是我们大多数人的编程入门语言 对其也再熟悉不过了 不过很多初学者在学习的过程中难免会出现迷茫 比如 不知道C语言可以开发哪些项目 可以应用在哪些实际的开发中 这些迷茫也导致了我们在学习的过程中不知道如何学 学什么 所以 总结这个列表
  • treeSelect节点搜索

    antd中treeSelect的filterTreeNode用法 节点搜索 以下图为例 树形搜索展开后 有以下几个选项 如果我想要搜索其中 产品中心 那直接搜索关键词 产品 即可 我搜索后并未显示我想要的结果 而是为空 这就需要用到 fil
  • 总结JS 常用函数

    希望本文总结的内容能给各位看官带来焕然一新的感觉 另外 如果你们有什么值得推荐的js技巧 欢迎在评论中补充 我可以收纳在本文中 PS 此文档会持续新增内容 Ajax请求 jquery ajax函数 我自己封装了一个ajax的函数 代码如下
  • sudo 之后 unable to resolve host的问题解决办法

    gedit etc hosts 127 0 0 1 localhost 127 0 0 1 Masterback或者其他 把后面的Masterback 或者其他改成新的主机名 应该是最近修改过主机名 也就是用户名 后面的部分

随机推荐