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

///

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

///

///

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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值