什么时候使用try / catch块?

我已经阅读完并理解了Try / Catch块的功能以及为什么使用它很重要。但是我一直坚持知道 何时/何

地使用它们。有什么建议吗?我将在下面发布我的代码示例,希望有人有时间为我的示例提出一些建议。

    public AMPFileEntity(string filename)

{

transferFileList tfl = new transferFileList();

_AMPFlag = tfl.isAMPFile(filename);

_requiresPGP = tfl.pgpRequired(filename);

_filename = filename.ToUpper();

_fullSourcePathAndFilename = ConfigurationSettings.AppSettings.Get("sourcePath") + _filename;

_fullDestinationPathAndFilename = ConfigurationSettings.AppSettings.Get("FTPStagePath") + _filename;

_hasBeenPGPdPathAndFilename = ConfigurationSettings.AppSettings.Get("originalsWhichHaveBeenPGPdPath");

}

public int processFile()

{

StringBuilder sb = new StringBuilder();

sb.AppendLine(" ");

sb.AppendLine(" --------------------------------");

sb.AppendLine(" Filename: " + _filename);

sb.AppendLine(" AMPFlag: " + _AMPFlag);

sb.AppendLine(" Requires PGP: " + _requiresPGP);

sb.AppendLine(" --------------------------------");

sb.AppendLine(" ");

string str = sb.ToString();

UtilityLogger.LogToFile(str);

if (_AMPFlag)

{

if (_requiresPGP == true)

{

encryptFile();

}

else

{

UtilityLogger.LogToFile("This file does not require encryption. Moving file to FTPStage directory.");

if (File.Exists(_fullDestinationPathAndFilename))

{

UtilityLogger.LogToFile(_fullDestinationPathAndFilename + " alreadyexists. Archiving that file.");

if (File.Exists(_fullDestinationPathAndFilename + "_archive"))

{

UtilityLogger.LogToFile(_fullDestinationPathAndFilename + "_archive already exists. Overwriting it.");

File.Delete(_fullDestinationPathAndFilename + "_archive");

}

File.Move(_fullDestinationPathAndFilename, _fullDestinationPathAndFilename + "_archive");

}

File.Move(_fullSourcePathAndFilename, _fullDestinationPathAndFilename);

}

}

else

{

UtilityLogger.LogToFile("This file is not an AMP transfer file. Skipping this file.");

}

return (0);

}

private int encryptFile()

{

UtilityLogger.LogToFile("This file requires encryption. Starting encryption process.");

// first check for an existing PGPd file in the destination dir. if exists, archive it - otherwise this one won't save. it doesn't overwrite.

string pgpdFilename = _fullDestinationPathAndFilename + ".PGP";

if(File.Exists(pgpdFilename))

{

UtilityLogger.LogToFile(pgpdFilename + " already exists in the FTPStage directory. Archiving that file." );

if(File.Exists(pgpdFilename + "_archive"))

{

UtilityLogger.LogToFile(pgpdFilename + "_archive already exists. Overwriting it.");

File.Delete(pgpdFilename + "_archive");

}

File.Move(pgpdFilename, pgpdFilename + "_archive");

}

Process pProc = new Process();

pProc.StartInfo.FileName = "pgp.exe";

string strParams = @"--encrypt " + _fullSourcePathAndFilename + " --recipient infinata --output " + _fullDestinationPathAndFilename + ".PGP";

UtilityLogger.LogToFile("Encrypting file. Params: " + strParams);

pProc.StartInfo.Arguments = strParams;

pProc.StartInfo.UseShellExecute = false;

pProc.StartInfo.RedirectStandardOutput = true;

pProc.Start();

pProc.WaitForExit();

//now that it's been PGPd, save the orig in 'hasBeenPGPd' dir

UtilityLogger.LogToFile("PGP encryption complete. Moving original unencrypted file to " + _hasBeenPGPdPathAndFilename);

if(File.Exists(_hasBeenPGPdPathAndFilename + _filename + "original_which_has_been_pgpd"))

{

UtilityLogger.LogToFile(_hasBeenPGPdPathAndFilename + _filename + "original_which_has_been_pgpd already exists. Overwriting it.");

File.Delete(_hasBeenPGPdPathAndFilename + _filename + "original_which_has_been_pgpd");

}

File.Move(_fullSourcePathAndFilename, _hasBeenPGPdPathAndFilename + _filename + "original_which_has_been_pgpd");

return (0);

}

}

}

回答:

捕获异常的基本经验法则是, 。

__如果只记录异常并将其抛出堆栈,则 不要 捕获异常。它没有意义,代码混乱。

难道 当你在你的代码的特定部分期待一个失败捕获异常,如果你有这方面的后备。

当然,总是会出现检查异常的情况,这要求您使用try / catch块,在这种情况下,您别无选择。即使有检查到的异常,也请确保您正确记录并尽可能干净地处理。

以上是 什么时候使用try / catch块? 的全部内容, 来源链接: utcz.com/qa/411502.html

回到顶部