使用C#脚本任务查找文件夹中丢失的文件(日期)



我有一些平面文件,文件名包括yyyyMMdd格式的日期。以下是一些例子:

文件夹路径:C:\Source

文件名:

myfile1_20220104983423.txtmyfile1_20220104983423.txtmyfile1_20220104983423.txtmyfile1_20220104983423.txtmyfile1_20220104983423.txtmyfile1_20220104983423.txt

我正在C#脚本任务中编写以下脚本,以循环浏览文件集,并根据文件的"最小日期"one_answers"最大日期"范围创建丢失的文件列表(比如yyyyMMdd格式(,并将其保存到SSIS对象类型变量中。

我尝试过的:

//define initial folder and extension
string initialdir = @"C:Source";
string fileExt = "*.txt";
//needed to extract date from file name
System.Globalization.CultureInfo cu = System.Globalization.CultureInfo.InvariantCulture;
//get files and missing dates
var filesAndDates = Directory.EnumerateFiles(initialdir, fileExt, SearchOption.AllDirectories)
//group files by directory name
.GroupBy(x => Path.GetDirectoryName(x))
//select files and corresponding dates from file name
.Select(grp => new
{
folder = grp.Key,
files = grp.Select(f=>Path.GetFileNameWithoutExtension(f)).ToList(),
dates = grp.Select(f=>DateTime.ParseExact(Path.GetFileNameWithoutExtension(f).Replace("myfile_", ""), "yyyyMMdd", cu)).ToList(),
})
//find missing dates in folders
.SelectMany(x =>
//create date range between min and max in current folder - get all dates
//exclude dates which already exist
Enumerable.Range(0, (int)(x.dates.Max() - x.dates.Min()).TotalDays + 1)
.Select(i => x.dates.Min().AddDays(i))
.Except(x.dates)
.Select(y=> new
{
folder = x.folder,
missingDate = y
})
);
foreach(var fd in filesAndDates)
{
dts.Variables["User::MissingFileList"].Value = fd.missingDate.ToString("yyyyMMdd", cu));
}

但我得到了这个错误";字符串未被识别为有效的日期时间";。我在这里错过了什么。任何帮助都将不胜感激。谢谢

我认为这个代码有两个问题:

首先,必须更改这一行:

dates = grp.Select(f=>DateTime.ParseExact(Path.GetFileNameWithoutExtension(f).Replace("myfile_", ""), "yyyyMMdd", cu)).ToList(),

到以下行:

dates = grp.Select(f => DateTime.ParseExact(DoFormat(f), "yyyyMMdd", cu)).ToList(),

哪个"DoFormat"方法如下(为了更清楚起见,我以这种方式重构(:

private static ReadOnlySpan<char> DoFormat(string f)
{
var data =  Path.GetFileNameWithoutExtension(f);
data = data.Replace("myfile1_", "");
return data;
}

这解决了用空字符串替换"myfile1_"的问题。

第二个问题发生在尝试使用yyyyMMdd格式化20220104983423时,并且必须考虑更改日期格式、重命名文件或更改生成文件的方式。

相关内容

  • 没有找到相关文章

最新更新