【发布时间】:2019-01-11 17:56:43
【问题描述】:
首先我应该说我是 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 的变量中。然后我将使用此变量向用户发送电子邮件,但我可以处理这部分。
更新: 添加整个sn-p代码有助于了解当前情况。
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());
}
【问题讨论】:
-
永远不要使用异常来驱动你的逻辑。顺便说一句,你为什么不使用 File.Exists?
-
感谢您的提示。我编辑了我的请求以表明我是新来的。我仍然需要测试文件是否丢失,但并不真正知道实现目标的最佳、最有效的方法。如果我使用 File.Exists,而该文件不存在,那也不例外吗?
-
@Steve 文件访问无论如何都需要异常处理 - 也许目的地是不可写的?在 IO 的情况下,它通常是规则的“例外”。
-
@user2864740 所以一个异常的异常...
-
如何使用循环移动文件,存储所有异常消息/详细信息以报告?确保将可恢复和不可恢复的案例分开。文件名可能是被循环的序列,例如。