【问题标题】:overwriting file with File.CreateText (C#)用 File.CreateText (C#) 覆盖文件
【发布时间】:2011-11-02 20:31:34
【问题描述】:

我遇到以下问题。我正在使用 .NET Framework 1.1,并尝试使用以下代码覆盖文件:

        try
        {
            using (StringWriter writer = new StringWriter())
            {
                Server.Execute(path, writer);

                using (StreamWriter sr = File.CreateText(filepath + fileName))
                {
                    sr.WriteLine(writer.ToString());
                }
            }
        }
        catch (Exception exc)
        {
            ...
        }

有时它可以正常工作,但有时它不会覆盖文件并且不会引发异常。有人可以告诉我可能是什么问题或如何处理它为什么不覆盖文件?

【问题讨论】:

    标签: c# file overwrite


    【解决方案1】:

    为什么不只是:

    File.WriteAllText(Path.Combine(filepath, fileName), writer.ToString())
    

    来自MSDN: 创建一个新文件,将指定的字符串写入文件,然后关闭文件。如果目标文件已经存在,则覆盖。

    【讨论】:

    • 看起来很有用,但我需要一些可以在 .NET Framework 1.1 中使用的东西。
    • @etarvt 你可能应该这么说,我们很难假设 1.1
    【解决方案2】:

    谁能告诉我问题可能是什么或如何处理它 不覆盖文件?

    好吧,回答您的实际问题,File.CreateText(string file) 的行为完全符合预期。如果filepath + fileName 使用您的示例,它是一个已经存在的文件,它会打开该文件而不是创建它。 (它不会覆盖)。

    您可以先使用File.Exists(string file) 检查文件是否存在,然后使用File.Delete(string file)

    如果File.CreateText(string file) 不能满足您的需求,您可以尝试其他类型。也许FileInfo

    微软说:

    创建或打开用于写入 UTF-8 编码文本的文件。

    来源:https://msdn.microsoft.com/en-us/library/system.io.file.createtext%28v=vs.110%29.aspx

    【讨论】:

      【解决方案3】:

      也可以通过内置的file.copy方法实现over write。

      File.copy 有过载 -

      File.Copy Method (Source, Destination, OverWrite)
      

      更多信息msdn

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2016-05-25
        • 2015-10-07
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-11
        • 1970-01-01
        • 2011-11-29
        相关资源
        最近更新 更多