我使用C#语言查找某些文件并将其移动到相应的文件夹。我现在使用这个代码,但是这个代码无法读取我最近收到的文件。在文件的名称之前,例如" File_20141120",但我现在得到的文件被命名,例如:ABC(222),ACD(2),DES(33),所以我需要编写一个代码来读取括号中的数字并将其移动到具有相同编号的文件夹。 我现在使用的代码:
public void Main()
{
string filename;
string datepart;
bool FolderExistFlg;
filename = Dts.Variables["User::FileName"].Value.ToString();
datepart = (filename.Substring(filename.Length - 12)).Substring(0, 8);
FolderExistFlg = Directory.Exists(Dts.Variables["OutputMainFolder"].Value.ToString() + "\\" + datepart);
if (!FolderExistFlg)
{
Directory.CreateDirectory(Dts.Variables["OutputMainFolder"].Value.ToString() + "\\" + datepart);
}
File.Move(Dts.Variables["SourceFolder"].Value.ToString() + "\\" + filename,
Dts.Variables["OutputMainFolder"].Value.ToString() + "\\" + datepart + "\\" + filename);
Dts.TaskResult = (int)ScriptResults.Success;
}
#region ScriptResults declaration
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion
}
}
答案 0 :(得分:0)
听起来你好像在问两个parens ()
之间如何提取文件夹名称。如果是这种情况,简单的RegEx将适合您:
// Extracts only the number between the parens
// E.g. Filename: aaa (333)
// Output: 333
var folderNumber = Regex.Match(
filename,
@"\(([^)]*)\)").Groups[1].Value;
答案 1 :(得分:0)
SSIS针对您正在执行的任务进行了优化。如果我们假设需要移动源文件夹中的所有文件,则将文件任务放在for循环中,并参数化源变量和目标变量。
创建五个变量:
使用ForEach循环遍历SourceFolder并读入每个文件名(选择文件名和扩展名)到FileName变量中(注意:将FileSpec设置为。或*。)。在File Task中,将source变量设置为SourceFileNameWithPath,将目标变量设置为DestinationFileNameWithPath。
文件系统任务应该是重命名文件。
https://www.tutorialgateway.org/move-multiple-files-using-file-system-task-in-ssis/