3 回答
TA贡献1851条经验 获得超3个赞
你应该注意到try-catch 永远不应该成为你代码逻辑的一部分,这意味着你永远不应该使用 try-catch 来控制你的分支。这就是为什么您会发现很难让异常流过每个 catch 块的原因。
如果你想抓住第二个块,你可以这样写(但不推荐):
try
{
SPFile destFile = projectid.RootFolder.Files.Add(destUrl, fileBytes, false);
}
catch (System.IO.DirectoryNotFoundException e)
{
try
{
SPFile destFile = projectid.RootFolder.Files.Add(destUrl2, fileBytes, false);
}
catch
{
// Do what you want to do.
}
}
catch
{
}
你最好不要像上面那样写。相反,建议像这样检测前面存在的文件夹:
try
{
YourMainMethod();
}
catch (Exception ex)
{
// Handle common exceptions that you don't know when you write these codes.
}
void YourMainMethod()
{
var directory = Path.GetDirectoryName(destUrl);
var directory2 = Path.GetDirectoryName(destUrl2);
if (Directory.Exists(directory))
{
SPFile destFile = projectid.RootFolder.Files.Add(destUrl, fileBytes, false);
}
else if (Directory.Exists(directory2))
{
SPFile destFile = projectid.RootFolder.Files.Add(destUrl2, fileBytes, false);
}
else
{
// Handle the expected situations.
}
}
TA贡献1850条经验 获得超11个赞
使用File.Exists查看路径是否已经存在可能更有意义,然后尝试写入文件:
string path = null;
if(!File.Exists(destUrl))
{
path = destUrl;
}
else
{
if(!File.Exists(destUrl2))
{
path = destUrl2;
}
}
if(!string.IsNullOrWhiteSpace(path))
{
try
{
SPFile destFile = projectid.RootFolder.Files.Add(path, fileBytes, false);
}
catch
{
// Something prevented file from being written -> handle this as your workflow dictates
}
}
然后,您希望发生的唯一例外是写入文件失败,您需要按照应用程序的要求进行处理(权限问题的处理方式应与无效的二进制数据、损坏的流等不同)。
- 3 回答
- 0 关注
- 143 浏览
添加回答
举报