SSIS 脚本任务使用通配符删除文件
Posted
技术标签:
【中文标题】SSIS 脚本任务使用通配符删除文件【英文标题】:SSIS Script Task Delete Files using a Wildcard 【发布时间】:2020-12-15 09:36:39 【问题描述】:使用 SQL Server 2014 \ VS 2019。我有以下 C# 脚本任务来删除文件夹中早于 x 天的文件,这是可行的。
public void Main()
int RetentionPeriod = Convert.ToInt32(Dts.Variables["$Package::FileRententionDays"].Value.ToString());
string directoryPath = Dts.Variables["CSV_ArchivePath"].Value.ToString();
string[] oldFiles = System.IO.Directory.GetFiles(directoryPath, "*.*");
foreach (string currFile in oldFiles)
FileInfo currFileInfo = new FileInfo(currFile);
if (currFileInfo.LastWriteTime < (DateTime.Now.AddDays(-RetentionPeriod)))
currFileInfo.Delete();
Dts.TaskResult = (int)ScriptResults.Success;
但是,我该如何修改为只是说,删除文件名以“ABC”开头的目录中的所有文件?
【问题讨论】:
查看currFileInfo.LastWriteTime
的值,而不是检查currFileInfo.FileName
的值
将文件名通配符更改为“ABC*.*”以仅返回匹配该模式的文件。
这些优秀的 cmets 中的任何一个都可以作为答案......
谢谢大家,我会调查的
【参考方案1】:
在类似StartsWithPrefix
的字符串中使用“PREFIX”定义您的开头。使用String.StartsWith
方法检查FileInfo
名称是否具有满足要求所需的已定义前缀。
int RetentionPeriod = Convert.ToInt32(Dts.Variables["$Package::FileRententionDays"].Value.ToString());
string directoryPath = Dts.Variables["CSV_ArchivePath"].Value.ToString();
string[] oldFiles = System.IO.Directory.GetFiles(directoryPath, "*.*");
string StartsWithPrefix = "ABC";
foreach (string currFile in oldFiles)
FileInfo currFileInfo = new FileInfo(currFile);
if (currFileInfo.LastWriteTime < (DateTime.Now.AddDays(-RetentionPeriod))
&& currFileInfo.Name.StartsWith(StartsWithPrefix))
currFileInfo.Delete();
https://docs.microsoft.com/en-us/dotnet/api/system.string.startswith?view=netcore-3.1 https://docs.microsoft.com/en-us/dotnet/api/system.io.fileinfo.name?view=netcore-3.1
【讨论】:
以上是关于SSIS 脚本任务使用通配符删除文件的主要内容,如果未能解决你的问题,请参考以下文章