我首先要说我是C#的新手。我在脚本中有四行代码,每行代码都重命名了特定目录中的文件。为了使我的程序成功运行,它需要这四个文件,并且需要为这些文件命名一个特定的名称。这些代码行是单独处理的,因此如果找到文件,第一行可以重命名文件,但是如果找不到文件,第二行可能会出错。另一种情况可能是,如果找不到要查找的特定文件,则第一行代码错误,并且由于脚本暂停,其余代码行将无法处理。我将这些脚本行添加到了一次尝试中,将尝试分别捕获每个异常,但是由于代码没有超过产生错误的第一行代码,因此这种方法似乎行不通。
如果缺少一个文件,我想将丢失文件的名称(或特定消息)存储在变量中。如果缺少多个文件,我想将多个消息存储在变量中,以通过SSIS包发送。
File.Move(fileDirectory_Dest + "EOYReportPRF.xls", fileDirectory_Dest + "EOY_PRF.xls");
File.Move(fileDirectory_Dest + "PayrollEOY.xls", fileDirectory_Dest + "EOY_SU.xls");
File.Move(fileDirectory_Dest + "PRFFundingStatement.xls", fileDirectory_Dest + "FS_PRF.xls");
File.Move(fileDirectory_Dest + "SUFundingStatement.xls", fileDirectory_Dest + "FS_SU.xls");
我想循环浏览所有四行代码,并将错误文本存储在SSIS包中名为User :: MessageText的变量中。然后,我将使用此变量向用户发送电子邮件,但我会处理这一部分。
更新: 添加完整的代码段以帮助了解当前情况。
try
{
foreach (FileInfo fi in dirInfo_Source.EnumerateFiles())
{
string newFileName = Regex.Replace(Path.GetFileNameWithoutExtension(fi.Name), "[0-9]|[.,/ -]", "").TrimEnd()+ fi.Extension;
fi.MoveTo(fileDirectory_Dest + newFileName);
//i++;.Replace(" ", "_") + i
}
///Rename Files
File.Move(fileDirectory_Dest + "EOYReportPalladia.xls", fileDirectory_Dest + "EOY_Palladia.xls");
File.Move(fileDirectory_Dest + "PayrollEOY.xls", fileDirectory_Dest + "EOY_SUS.xls");
File.Move(fileDirectory_Dest + "PRFFundingStatement.xls", fileDirectory_Dest + "FS_Palladia.xls");
File.Move(fileDirectory_Dest + "SUSFundingStatement.xls", fileDirectory_Dest + "FS_SUS.xls");
}
catch (Exception ex)
{
MessageBox.Show(fileDirectory_Dest);
MessageBox.Show(ex.Message.ToString());
}
答案 0 :(得分:1)
当您可以使用较便宜的方法进行检查时,请避免使用异常。当然,在处理文件时,您总是会遇到“异常”情况,这是处理异常的正确选择
您可以在使用
运行File.Move代码块之前检查文件是否存在。try
{
string fileDirectory_Dest = @"E:\temp\";
List<string> files = new List<string>
{
fileDirectory_Dest + "EOYReportPRF.xls",
fileDirectory_Dest + "PayrollEOY.xls",
fileDirectory_Dest + "PRFFundingStatement.xls",
fileDirectory_Dest + "SUFundingStatement.xls"
};
var errors = files.Where(x => !File.Exists(x)).Select(x => x);
if(errors.Any())
Console.WriteLine("Files missing\r\n" + string.Join(Environment.NewLine, errors));
}
catch
{
Logger.Error("Error processing files");
throw;
}