我有这种情况不确定如何最好地处理这个问题。输入将不胜感激。想象一下我有这样的方法:
void loaddata()
{
try
{
// EXTRA: I also want to skip below SaveSomething if there was exeption
// last time I called DecryptAndloadXMLdata. This may happen
// if user calls loaddata twice. This is exaclty similar situation
// as app quitting just it happens is user calls loaddata twice
// and during first call there was exception say with DecryptAndloadXMLdata
Savesomething(listOfObjects, xmlPath);//save old data first
xmlPath = newValue;
// some operations
xmlDoc = DecryptAndloadXMLdata(xmlPath);
// some other operations- populate List with data from above XML file
listOfObjects.Add(objectFromXML);
// Here also possibly modify contents of listOfObjects elements
}
catch(Exception ex)
{
xlmPath="";
}
}
现在问题是应用程序退出时我有这样的功能 自动保存上面填充的List对象 文件的方法。像:
void whenAppisQuitting()
{
Savesomething(listOfObjects, xmlPath);
}
但问题是。想象一下xmlDoc = loadXMLdata();
抛出上面的方法。会发生什么是我提到的列表不会被填充,当应用程序退出空元素(例如空listOfObjects
)将写入xmlPath
- 从而损坏我的原始文件,因为没有相关例外情况是由于loadXMLData
方法中的加密。
我希望我的问题清楚明了。处理这种情况的方法是什么?例如我所做的你可以看到我在xmlPath
中将catch
设置为空 - 因此,如果有任何异常我认为数据未成功加载 - 因此现在在应用程序退出时我可以保持冷静,因为没有什么会写入文件,因为它是xmlPath =""
。这是解决这个问题的合理方法吗?
有点困惑,因为这种问题现在将错误处理提升到不同的水平 - 我需要考虑所有可能的失败?
答案 0 :(得分:1)
处理此类情况的方法是什么?
我会设置一个标志,指示解析时出错。将路径设置为string.Empty
会导致混淆(IMO)。也许一个空字符串可能是传递给您的方法的可能值。
catch(Exception ex)
{
// Log
IsParsingSuccessful = false;
}
当你想写时,看看那面旗帜:
void AppIsQuitting()
{
if (IsParsingSuccessful)
{
SaveSomething(listOfObjects, xmlPath);
}
}
答案 1 :(得分:0)
作为一般指导,您可能永远不应在没有用户明确意图的情况下覆盖文件。
至于您的错误处理,请使用简单的标志/布尔值来指示有效行为。仅在处理完所有内容后将该标志设置为true,并且仅当该标志为真时,将内容保存到文件中。