File.WriteAllText()运行正常,还是运行?

时间:2012-03-13 20:44:37

标签: c# file-io

我已经开始使用这段代码2小时(字面上)的最佳部分,但我似乎无法理解为什么会失败。下面的方法不会报告任何异常,但它似乎返回false:

public bool SaveFile(string filename, object source)
{
    bool result = true;
    StringBuilder exportText = new StringBuilder(source.ToString());
    try {
        File.WriteAllText(filename, exportText.ToString());
    }
    catch (Exception e)
    {
        OnPluginError(new ErrorEventArgs(e));
        result = false;
    }

    return result;
}

问题是:文件在请求的路径上正确写入,完整且可读。不会抛出任何异常,因为未调用OnPluginError()处理程序调用方法 - 在这种情况下将记录任何消息,但没有记录任何消息。它不能是权限问题,因为调用后文件确实存在。 而且,方法结果仍然是假的。

问题仅出现在发布版本中。在Debug版本中,所有似乎都可以正常工作。因此,我不能使用调试器来逐步完成。

这是从Web应用程序调用的。任何想法都赞赏。

2 个答案:

答案 0 :(得分:1)

作为临时故障排除步骤,添加另一个try catch来阻止任何异常,然后查看该函数是否仍然返回false。

public bool SaveFile(string filename, object source)
{
    bool result = true;
    StringBuilder exportText = new StringBuilder(source.ToString());
    try {
       try {
        File.WriteAllText(filename, exportText.ToString());
       } catch(Exception e) {  }
    }
    catch (Exception e)
    {
        OnPluginError(new ErrorEventArgs(e));
        result = false;
    }

    return result;
}

如果它返回true,那么你已经隔离了问题并确定抛出了一个异常,导致运行带有result = false的块。

如果它仍然返回false,那么你可以确定问题是在这个函数之外,因为控制流的规则将决定结果变量永远不会被改变。

一种可能性是您遇到的问题是您认为正在运行的代码并未真正运行。例如,构建过程中的某些问题没有获取最近的代码更改或重定向。检查网站项目DLL的版本,进行清理/重建,添加附加代码以写出跟踪消息,您应该尝试交叉检查以验证最近的代码是否正在运行。

另一种可能性是代码中检查返回值的问题。

答案 1 :(得分:0)

嗯......我觉得这里有点傻。我终于找到了问题,并且(正如一些海报质疑)与WriteAllText()方法根本没有关系。

仅供参考:此代码深入到广泛的插件库中。并非所有代码都是由我设计和编写的,并且已经存在了近2年而没有遇到问题。

正如我所提到的,WriteAllText()运行良好。它做了。问题是保存的文件的位置存储在一个Dictionary中,而Dictionary又是从当前运行的插件中请求的。该词典(包含插件设置)结果是每次调用该属性时都是从头开始创建的!所以我可以添加到我想要的内容....在下一次调用该属性时,新添加的项目会因为字典重新创建而神奇地“消失”。 因为它之前从未出现过,并且该代码在很多其他插件中运行没有问题,所以我没有检查该属性。我的坏。

向所有回应浪费时间的人道歉。请放心,它不会很快发生!获得的经验......