C# (批处理) 过期的文件删除
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# (批处理) 过期的文件删除相关的知识,希望对你有一定的参考价值。
我刚刚开始学习C#不久,想用C#做一个过期的文件删除的批处理(console application)
条件是
1.启动批处理后,可以删除指定文件夹里的过期的文件(过期是按照文件更新时间来定)
2.需要删除的文件夹和过期的天数(例 7天前)可以通过XML文件进行设定
■XML文件
<?xml version="1.0" encoding="utf-8" ?>
<SETTINGS_DATA>
<SETTING date = "4">d:\a\</SETTING> //d:\a\文件夹里的四天前的文件删除
<SETTING date = "2">d:\b\</SETTING> //d:\b\文件夹里的两天前的文件删除
・・・
</SETTINGS_DATA>
有哪位高手可以做一个SAMPLE,谢谢了
谢谢,2楼的回答
执行完后有2个ERR
1 using System.Linq; 这个CLASS找不到
2 Files.AddRange(Directory.GetFiles(dir, "*", SearchOption.AllDirectories).Where(o => (System.DateTime.Now - (new FileInfo(o).CreationTime)) > Days));
"Where"/"o"这两个命令/参数找不到
我用的是VS2005
using System.Collections.Generic;
using System.Linq;
using System.Xml;
using System.IO;
namespace ConsoleApplication1
class Program
static void Main(string[] args)
//初始化所需变量
TimeSpan Days = new TimeSpan();
List<string> Dirs = new List<string>();
List<string> Files = new List<string>();
//读取XML文档
XmlDocument xml = new XmlDocument();
xml.Load(File.Open("DirList.xml", FileMode.Open));
//循环读取所需参数
foreach (XmlNode rootNodes in xml.ChildNodes[1])
if (rootNodes.Name.Equals("days"))
Days = new TimeSpan(Convert.ToInt32(rootNodes.InnerText), 0, 0, 0);
continue;
if (rootNodes.Name.Equals("dirs"))
foreach (XmlNode dirNodes in rootNodes.ChildNodes)
Dirs.Add(dirNodes.InnerText);
if (Dirs.Count == 0)
Console.WriteLine("没有文件需要删除!");
Console.ReadLine();
return;
//取得需要删除的文件
foreach (string dir in Dirs)
Files.AddRange(Directory.GetFiles(dir, "*", SearchOption.AllDirectories).Where(o => (System.DateTime.Now - (new FileInfo(o).CreationTime)) > Days));
//输出提示
Console.WriteLine("下列文件需要删除:");
foreach (string file in Files)
Console.WriteLine(file);
//捕捉键盘输入并删除
while (true)
Console.WriteLine("确认删除请输入y,取消输入n");
string Input = Console.ReadLine().ToLower();
if (Input.Equals("y"))
foreach (string file in Files)
Console.WriteLine("删除 " + file);
File.Delete(file);
Console.WriteLine("删除完成,按任意键退出");
Console.ReadLine();
return;
else if (Input.Equals("n"))
Console.WriteLine("您已取消删除,按任意键退出");
Console.ReadLine();
return;
XML文件名为DirList.xml,在同一目录下,格式:
<?xml version="1.0" encoding="utf-8" ?>
<root>
<days>7</days>
<dirs>
<dir>C:\Ati</dir>
<dir>C:\dell</dir>
</dirs>
</root> 参考技术B 晕,昨天刚刚给人做过这个例子,你们是不是同学之类的啊....来我空间看看吧,把XML读取参数的地方稍微改一下,判断删除条件的地方改一下就能用了
http://hi.baidu.com/depluin/blog/item/47ced33785ac0c3c0a55a9d8.html
楼上的,你抄我代码也最少得有点创意,把内容改成符合要求的啊.......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml;
using System.IO;
namespace ConsoleApplication1
class Program
static void Main(string[] args)
//设定变量
Dictionary<string, TimeSpan> Dirs = new Dictionary<string, TimeSpan>();
List<string> Files = new List<string>();
//读取XML文档
XmlDocument xml = new XmlDocument();
xml.Load(File.Open("DirList.xml", FileMode.Open));
//循环读取XML节点,读出所需参数
foreach (XmlNode rootNodes in xml.ChildNodes[1])
if (rootNodes.Name.ToLower().Equals("setting"))
try
Dirs.Add(rootNodes.InnerText, new TimeSpan(Convert.ToInt32(rootNodes.Attributes["date"].Value), 0, 0, 0));
catch (ArgumentException ae)
//回避因XML可能出现的多个相同目录引起的错误
Console.WriteLine("错误:0,已略过:1", ae.Message, rootNodes.InnerText);
continue;
//取得需要删除的文件
foreach (KeyValuePair<string, TimeSpan> dir in Dirs)
Files.AddRange(Directory.GetFiles(dir.Key, "*", SearchOption.AllDirectories).Where(o => (System.DateTime.Now - (new FileInfo(o).CreationTime)) > dir.Value));
//检查变量
if (Files.Count == 0)
Console.WriteLine("没有文件需要删除!");
Console.ReadLine();
return;
//输出提示
Console.WriteLine("下列文件需要删除:");
foreach (string file in Files)
Console.WriteLine(file);
//捕捉键盘输入并删除
while (true)
Console.WriteLine("确认删除请输入y,取消输入n");
string Input = Console.ReadLine().ToLower();
if (Input.Equals("y"))
foreach (string file in Files)
Console.WriteLine("删除 " + file);
File.Delete(file);
Console.WriteLine("删除完成,按任意键退出");
Console.ReadLine();
return;
else if (Input.Equals("n"))
Console.WriteLine("您已取消删除,按任意键退出");
Console.ReadLine();
return;
XML文件
<?xml version="1.0" encoding="utf-8" ?>
<SETTINGS_DATA>
<SETTING date = "4">C:\Ati</SETTING>
<SETTING date = "2">C:\dell</SETTING>
<SETTING date = "2">C:\dell</SETTING>
</SETTINGS_DATA>
参考资料:http://hi.baidu.com/depluin/blog/item/47ced33785ac0c3c0a55a9d8.html
本回答被提问者和网友采纳 参考技术C Linq是.Net Framework 3.5的东西。"Where"/"o"这两个命令/参数是Linq的东西 参考技术D 你用的IDE是什么,VS2005是没有using System.Linq的,vs2008才有
删除 C# 二进制文件中未使用的预处理器符号
【中文标题】删除 C# 二进制文件中未使用的预处理器符号【英文标题】:remove unused preprocessor symbols in c# binary 【发布时间】:2017-08-22 21:42:29 【问题描述】:我有一个带有一些条件构建的项目。我编译它。然后用dotpeek看了一下。我注意到 ALL 条件语句和它包装的代码,即使没有定义。
由于此应用程序针对不同的客户端以某些关键方式进行了修改,因此我希望该客户端的构建具有一个 仅 包含已定义的活动 #ifs 的二进制文件。
如何进行自动化构建来实现这一目标?
【问题讨论】:
请分享一些带有条件语句的小代码,DotPeek 能够从已编译的二进制文件中恢复,这些代码可以在我们这边重现。 【参考方案1】:dotPeek 做了两件事
-
可以反编译IL代码
它可以读取PDB文件并查找源文件
您可以在上下文菜单中看到这一点。一项是“反编译的源代码”,另一项是“来自符号文件的源代码”:
通过双击一个项目,它会首先尝试执行操作2,即:显示您硬盘上存在的源文件。
这是一个非常简单的程序:
左:来自符号文件的源代码 中间:反编译的源代码 右:IL 代码如您所见,编译后的代码只包含编译后的那些部分。
因此,无需在构建脚本中剥离这些部分,因为 DLL 或 EXE 不包含它。
【讨论】:
以上是关于C# (批处理) 过期的文件删除的主要内容,如果未能解决你的问题,请参考以下文章