删除比今天更早的文件

时间:2016-04-27 02:08:17

标签: c# arrays string datetime split

我有一些格式为" yyyyMMdd_hhmmss_abc.txt"在特定的位置。 使用下面的代码,我能够使用" _abc.txt"获取所有文件。在那个文件夹中。

fileArray = Directory.GetFiles(@"C://Documents", "*abc.txt");
for (int i = 0; i < fileArray.Length; i++)
{
    fileArray[i] = Path.GetFileNameWithoutExtension(fileArray[i]);
    Console.WriteLine(fileArray[i]);
}

但是现在我正在考虑阅读文件名,将其拆分然后转换为日期时间对象,这样我就可以检查条件(比今天更早的日期)并删除它们。

for eg: 20160426_045823_abc.txt

我想将其拆分为2016年,04年,26年,然后使用转换为日期时间对象 Datetime d1 = new Datetime(2016,04,26)然后进行其他操作。

还有其他方法可以解决这个问题吗?

提前致谢

4 个答案:

答案 0 :(得分:2)

以下代码可用于获取创建日期少于今天日期的文件集合。对集合的简单迭代将帮助您删除它们:考虑代码

简单选项:

foreach (var item in Directory.GetFiles(@"C://Documents", "*.txt")
                               .Where(x => new FileInfo(x).CreationTime.Date  < DateTime.Now.Date))
{
    File.Delete(item);
} 

基于文件名:

var fileArray = Directory.GetFiles(@"C://Documents", "*abc.txt");
for (int i = 0; i < fileArray.Length; i++)
{
    DateTime fileNameTime;
    string fileName = Path.GetFileNameWithoutExtension(fileArray[i]).Replace("_abc", " ");
    fileNameTime = DateTime.ParseExact("yyyyMMdd_hhmmss", fileName, CultureInfo.InvariantCulture, DateTimeStyles.None);
    if (fileNameTime.Date < DateTime.Now.Date)
    {
        File.Delete(fileArray[i]);
    }
}
  

请注意:最好和最有效的选项是第一个,您需要做的是将文件名指定为时间的dateTime   创建文件(如果它在你的控制之下)那么事情   变得更容易

答案 1 :(得分:2)

文件名已基于日期以可排序的格式显示。为什么不根据今天的日期创建文件名,而不是将文件名的位解析为DateTime对象,并将文件名数组过滤到只有字符串比较少于当今日期文件名的文件名?对于大型文件列表,它可能比对每个文件名进行日期解析要快得多。

例如:

var path = "c:\\whatever";
var suffix = "_abc.txt";
var todaysFilename = DateTime.Now.ToString("yyyyMMdd_hhmmss") + suffix;
var filesToDelete = Directory.EnumerateFiles(path, "*" + suffix)
    .Select(Path.GetFileName)
    .Where(fileName => string.Compare(fileName, todaysFilename, StringComparison.Ordinal) < 0)
    .ToArray();

foreach (var file in filesToDelete)
{
    File.Delete(Path.Combine(path, file));
}

答案 2 :(得分:1)

您可以获取字符串的名称并执行DateTime.ParseExact。

String dateString = Path.GetFileNameWithoutExtension(fileArray[i])
DateTime d5 = DateTime.ParseExact(dateString, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None)
if (d5.Date < DateTime.Now.Date)
{
    File.Delete(fileArray[i]);
}

这将取字符串的前8个字符,并解析它。 你也可能只想要没有路径和扩展名的文件名。

https://msdn.microsoft.com/en-us/library/w2sa9yss%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

答案 3 :(得分:0)

你可以像这样创建一个文件的DateTime

DateTime time = File.GetCreationTime(fileName);

是的,这很容易。