我试图创建一个C#脚本任务来重命名我每天收到的一对文件,这些文件的末尾附加了16位时间戳。像这样的文件“ Cartons_2018091014000000”
我在C#方面的经验还很低,所以请原谅我在逻辑结构上的尝试。
这是我一直认为可行的方法,但遇到了一些非常非描述性的错误。
public void Main()
{
String txtfile = null;
String[] fileEntries = Directory.GetFiles(@"\\test-file-server-name\Scripts\", "Cartons_*");
foreach (string filename in fileEntries)
{
if(filename.Contains("Cartons"))
{
txtfile = filename;
System.IO.File.Move(txtfile, "Cartons.csv");
}
}
// TODO: Add your code here
Dts.TaskResult = (int)ScriptResults.Success;
}
有什么想法或建议吗?还是在SSIS中执行此操作的更好/更优雅的方法?我当时以为我会使用ForLoop容器,但我认为它不起作用的原因是由于附加了时间戳,文件名每小时都会更改。
答案 0 :(得分:0)
我很可能会猜测您在处理第二个文件时会遇到File already exists
异常,因为您都将它们重命名为相同的名称。
我建议您在代码中放置一个断点,然后重新运行该程序包。这将使您逐步确认它。
如果这是问题所在,那么您只需要为唯一的文件选择新名称即可。
FWIW,您应该能够使用内置的文件系统任务来实现相同的功能(移动和重命名文件),而不是自己编写脚本。这是一个教程。 http://www.rafael-salas.com/2007/03/ssis-file-system-task-move-and-rename.html
答案 1 :(得分:0)
看起来像您拥有它,但可能是将文件保存在exe文件的运行时路径中。 (您只需要添加完整路径)
using System.IO;
class Program
{
static public void Main()
{
string Path = @"\\test-file-server-name\Scripts\";
string[] fileEntries = Directory.GetFiles(Path, "Cartons_*");
foreach (string filename in fileEntries)
{
if (filename.Contains("Cartons"))
{
File.Move(filename, Path + "Cartons.csv");
}
}
// TODO: Add your code here
//Dts.TaskResult = (int)ScriptResults.Success;
}
}