SSIS переименовывает файлы в каталоге с помощью задачи сценария

Я использую приведенный ниже код, чтобы переименовать все файлы в папке с отметкой времени. Но это исключение.

Пожалуйста, предложите любые решения.

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));
}

Вызвано исключение:

Изображение описания ошибки


person Atul Shubhankar    schedule 25.08.2018    source источник
comment
Что является исключением?   -  person Jeroen Heier    schedule 25.08.2018
comment
Почему вы сказали бы «сгенерировать исключение» ..... и на самом деле не опубликовали исключение? Вы уже смотрели на текст исключения? Вы можете решить свою проблему   -  person Nick.McDermaid    schedule 25.08.2018
comment
Я добавил снап. Теперь вы можете оценить проблему. Я не могу понять это!   -  person Atul Shubhankar    schedule 26.08.2018
comment
@AtulShubhankar добро пожаловать в Stack Overflow, я думаю, что лучше начать с чтения страницы тура, чтобы узнать больше о правилах сайта (спрашивая , отвечая, голосуя, принимая ответы, ...). и получить информационный значок, который сообщит другим пользователям, что вы прочитали правила. Так вы получите больше помощи. Удачи   -  person Hadi    schedule 26.08.2018
comment
Это ошибка исключения SSIS. Поместите свою контрольную точку в код С# и выполните ее (F11). Вы получите лучшую ошибку.   -  person KeithL    schedule 27.08.2018


Ответы (1)


Прежде всего, при использовании @ перед строкой не следует использовать \\, потому что символ @ используется для обозначения строки как дословного строкового литерала. Таким образом, все в строке, что обычно интерпретируется как управляющая последовательность, игнорируется.

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);
}

Рекомендации

person Hadi    schedule 26.08.2018
comment
@AtulShubhankar, если этот ответ решил вашу проблему, вы должны принять его. Просто нажмите на отметку под стрелками голосования - person Hadi; 27.08.2018
comment
Я как раз собирался упомянуть именно эту проблему, но вы, конечно же, убили ее документацией! - person KeithL; 27.08.2018