c# - 使用 Try/Catch 测试四个 File.Move 任务,看文件是否存在
问题描述
我应该首先说我是 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());
}
解决方案
当您可以使用成本较低的方式进行检查时,请避免使用异常。当然,在处理文件时,您总是会遇到“异常”情况,这是异常处理的正确工作
您可以在运行 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;
}
推荐阅读
- ffmpeg - FFmpeg 使图像中的视频跳过中间或后面的范围
- r - 将 R 数据框上传到 Big Query 时保持列顺序
- elasticsearch - elasticsearch同义词和带状疱疹冲突
- autohotkey - 为什么命令在条件括号之外执行?
- javascript - iText 7 会渲染 ChartJS 图表吗?
- html - SVG填充动画返回初始状态
- javascript - 当我尝试在 firebase.auth().onAuthStateChanged() 方法中调度操作时,反应应用程序“减速”
- javascript - React Native props.navigation.navigate 不是一个对象
- web-scraping - 我没有得到这个 python 代码的任何输出
- javascript - 为什么会