用File.CreateText(C#)覆盖文件

时间:2011-08-24 14:04:05

标签: c# file overwrite

我遇到了以下问题。我正在使用.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)
        {
            ...
        }

有时它工作正常,但有时它不会覆盖文件,也不会抛出任何异常。有人可以告诉我问题是什么或如何处理它为什么不覆盖文件?

3 个答案:

答案 0 :(得分:7)

为什么不呢:

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

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

答案 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

答案 2 :(得分:0)

使用内置的file.copy方法也可以实现

over write。

File.copy有重载 -

File.Copy Method (Source, Destination, OverWrite)

msdn

的更多信息

希望这会有所帮助。