SSIS使用脚本任务重命名目录中的文件

时间:2018-08-25 07:00:18

标签: c# sql-server ssis etl script-task

我使用下面的代码来重命名带有时间戳的文件夹中的所有文件。 但这引发了异常。

请提出任何解决方案。

using System.IO;

public void Main()
{
    DirectoryInfo directoryInfo = new DirectoryInfo(@"C:\\Users\\AShubhankar\\Desktop\\archive_feb");
    //if the director exists then proceed
    if (directoryInfo.Exists)
    {
        var fileList = directoryInfo.GetFiles();

        foreach (FileInfo fleInfo in fileList)
        {
            var newFileName = GetNewFileName(fleInfo);
            //copies the new file names
            fleInfo.CopyTo(newFileName, true);
            //delete the old/original files
            fleInfo.Delete();
        }
        Dts.TaskResult = (int)ScriptResults.Success;
    }
    else
    {
        MessageBox.Show("Directory not found");
        Dts.TaskResult = (int)ScriptResults.Failure;
    }
}

// Function to get the new file name        
private static string GetNewFileName(FileInfo fleInfo)
{
    var shortDate = DateTime.Now.ToShortDateString().Replace("/", string.Empty);
    var format = string.Format("{0}_{1}", shortDate);
    var extension = ".txt";
    return Path.Combine(fleInfo.DirectoryName, 
    string.Concat(fleInfo.Name.Split('.')[0], "_", format, extension));
}

引发异常:

Image of the error description

1 个答案:

答案 0 :(得分:3)

首先,在字符串前使用@时,请勿使用\\,因为@符号用于将字符串标记为逐字字符串。因此,字符串中通常被解释为转义序列的所有内容都将被忽略。

DirectoryInfo directoryInfo = new DirectoryInfo(@"C:\Users\AShubhankar\Desktop\archive_feb");

或者您可以使用:

DirectoryInfo directoryInfo = new DirectoryInfo("C:\\Users\\AShubhankar\\Desktop\\archive_feb");    

第二,无需复制文件然后删除旧文件,只需使用Move函数来重命名文件即可。


您还可以使用以下代码(简单版本):

public void Main()
{
    string strdirectory = @"C:\Users\AShubhankar\Desktop\archive_feb";
    //if the director exists then proceed
    if (Directory.Exists(strdirectory))
    {
        string[] fileList = Directory.GetFiles(strdirectory,"*.*",SearchOption.AllDirectories);

        foreach (string strfile in fileList)
        {
            string newFileName = GetNewFileName(strfile);
            //rename the new file
           File.Move(strfile, newFileName);

        }
        Dts.TaskResult = (int)ScriptResults.Success;
    }
    else
    {
        MessageBox.Show("Directory not found");
        Dts.TaskResult = (int)ScriptResults.Failure;
    }
}

// Function to get the new file name        
public string GetNewFileName(string strfile)
{
    string shortDate = DateTime.Now.ToString("yyyyMMdd_HHmmss");
    string extension = ".txt";
    return string.Concat(Path.GetDirectoryName(strfile),Path.GetFileNameWithoutExtension(strfile), "_", shortDate, extension);
}

参考