首页 > 解决方案 > 使用 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());
            }

标签: c#ssis

解决方案


当您可以使用成本较低的方式进行检查时,请避免使用异常。当然,在处理文件时,您总是会遇到“异常”情况,这是异常处理的正确工作

您可以在运行 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; 
}

推荐阅读