C# - 程序不会覆盖现有的文本文件

时间:2015-06-28 10:38:01

标签: c# overwrite writetofile

我的系统在程序的第一个按钮上创建一个文本文件,并在其他按钮点击时附加各种内容。理想情况下,所有内容都将在最后保存,但由于它是一个使用计时器的监控系统,因此某些数据需要在特定时间写入文件,否则将丢失。

单击第一个按钮(btnStart),程序找到/创建主文件夹(使用常量字符串给出名称)并定位/创建子文件夹(使用在按钮之前输入组合文本框中的文本)单击)这将设置文本文件的目录,如下所示string(fileName):

    private void createDirectory()
    { //create output file in this folder using owner name and current date

        //main folder path (contains all files output from system)
        string rootDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\Horse Monitoring Records";
        //sub folder path (each patient has individual subfolder)
        string subDirectory = rootDirectory + "\\" + txtPatName.Text + "/" + txtOwnerName.Text;
        //file name (patient has file created for each operation)
        fileName = subDirectory +  "\\" + txtOwnerName.Text + "/(" + DateTime.Now.Date.ToString("dd-MM-yyyy") + ").txt";

        if (!Directory.Exists(rootDirectory)) //if main folder does not exist...
        {
            Directory.CreateDirectory(rootDirectory); //create it in My Documents
        }
        if (!Directory.Exists(subDirectory)) //if patient sub folder does not exist...
        {
            Directory.CreateDirectory(subDirectory); //create it in Patient-Owner format
        }
    }

调用的下一个函数将第一个文本写入文件,如下所示:

    private void saveFileDetails()
    {
        //Once case details have been entered, create new file using these details and add data input structure
        StreamWriter consoleFile = new StreamWriter(fileName, true);

        consoleFile.WriteLine("------------------------------------------- Case Details -------------------------------------------");
        consoleFile.WriteLine("\n\n");

        //patient and vet details
        ...
        }

最初当我设置此函数时,我没有在函数的第一行中包含StreamWriter的'true'重载。这导致运行时错误,告诉我文本文件无法打开,因为它已被另一个进程打开。

由于我添加了'true'重载,系统工作正常,但我刚刚遇到一个问题,一旦创建了一个文本文件,它就不会被StreamWriter使用的文本文件覆盖。同样的道路。

我确实需要能够覆盖文件,因为它们在一段时间后变得过时并需要被替换,是否有人知道我可以从哪里解决这个问题?

谢谢, 标记

1 个答案:

答案 0 :(得分:0)

StreamWriter带有布尔值的重载详细here。 true使其附加内容。如果您总是想要覆盖该文件,则可以使用File.OpenWrite;我相信你也可以将它传递给构造函数,如下所示:

V

详细了解File.OpenWriteFIleMode。如果你想使用它,File.OpenWrite可以自己完成这项工作。但我相信,因为File.OpenWrite返回FIleStream,可以将其传递给StreamWriter构造函数。