SSIS使用脚本任务重命名目录中的文件
SSIS renaming files in a directory using 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));
}
抛出异常:
首先,当在字符串前使用@
时,不应该使用\
,因为@
符号用于将字符串标记为逐字字符串文字。因此,字符串中通常被解释为转义序列的任何内容都将被忽略。
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);
}
参考资料
- What's the @ in front of a string in C#?
- Rename a file in C#
我正在使用下面的代码,用时间戳重命名文件夹中的所有文件。 但它抛出异常。
请提出任何解决方案。
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));
}
抛出异常:
首先,当在字符串前使用@
时,不应该使用\
,因为@
符号用于将字符串标记为逐字字符串文字。因此,字符串中通常被解释为转义序列的任何内容都将被忽略。
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);
}
参考资料
- What's the @ in front of a string in C#?
- Rename a file in C#