【问题标题】:Does File.AppendAllText close the file after the operationFile.AppendAllText 操作后是否关闭文件
【发布时间】:2009-12-04 18:23:10
【问题描述】:

执行完操作后是否会关闭文件? :

System.IO.File.AppendAllText(path, text);

是,否就足够了?

【问题讨论】:

    标签: c# file-io


    【解决方案1】:

    是的,确实如此。

    如果没有,之后将无法关闭它,因为它不会返回任何可处置的东西。

    来自the docs

    给定一个字符串和一个文件路径,这个 方法打开指定的文件, 将字符串附加到末尾 文件,然后关闭文件。

    其他实用程序方法(ReadAllTextWriteAllBytes 等)的工作方式相同。

    【讨论】:

    • 谢谢我倾向于使用 StreamWriter,但这似乎更容易。
    • 这似乎是一个命名约定,所有包含 All 的 IO 方法都释放/关闭底层流,例如:File.AppendAllLinesFile.AppendAllTextFile.ReadAllBytesFile.ReadAllLines、@ 987654329@,File.WriteAllLinesFile.WriteAllText。这不是保证,而是一个很好的助记符。
    • @TimSchmelter:我会选择“它是否返回流/读取器/写入器?”如果没有,它应该关闭一切(因为它无能为力)。如果是这样,它不会返回您已经关闭的东西。
    • @JonSkeet:是的,另一个很好的迹象。但是你必须仔细观察,无论是在文档中还是在 Visual Studio 中。命名约定有助于事先澄清事情。也有一些方法,如果它关闭像 File.ReadLines 这样的流,而不是 ReadAllLines,则返回类型并不明显。
    【解决方案2】:

    这是方法的代码:

    public static void AppendAllText(string path, string contents, Encoding encoding)
    {
        using (StreamWriter writer = new StreamWriter(path, true, encoding))
        {
            writer.Write(contents);
        }
    }
    

    因此,是的。

    【讨论】:

    • 我不认为依赖实现细节是一个好主意,除非你绝对必须这样做。实施可以改变。幸运的是,在这种情况下,它已明确记录在案。
    猜你喜欢
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多