使用Try / Catch测试四个File.Move任务以查看文件是否存在

时间:2019-01-11 17:56:43

标签: c# ssis

我首先要说我是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());
            }

1 个答案:

答案 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; 
}