直到应用程序运行结束才写入c#文件

本文关键字:文件 结束 应用程序 运行 | 更新日期: 2023-09-27 18:06:06

我有一组Specflow测试,我正在运行,我试图在每个场景完成后将结果写入到一个文件,然后我在整个测试运行结束时再次写入。如果我在调试模式下运行测试,那么在每个场景之后都会命中此代码,但该文件仅在所有测试完成后才出现在Windows资源管理器中(或者我强制测试停止)。下面写入文件的代码位于Specflow测试项目的单独项目中。

我最初没有刷新,并将此替换为StreamWriter:

using (var file = new FileInfo(filePath).AppendText())

但这不起作用,所以在互联网上查找各种例子后,我添加了额外的Flush, Close,然后Process。一开始,我换了StreamWriter,但没有一个有帮助。当前仍然不能工作的代码是:

    private string rootFolderPath = Directory.GetParent(@"..'..'..'..") +@"'";
    public void WriteAllTestScenarioNames(List<ScenarioResult> results, string fileName, string directoryName)
    {
        results.Sort();
        Directory.CreateDirectory(rootFolderPath + directoryName);
        string filePath = rootFolderPath + directoryName + @"'" + fileName;
        using (var file = new System.IO.StreamWriter(filePath))
        {
            file.WriteLine(DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString());
            foreach (var scenarioResult in results)
            {
                file.WriteLine(scenarioResult.ToString());
            }
            file.Flush();//flush the file to ensure that it's written now
            file.Close();//flush the file to ensure that it's written now
        }
        Process.Start(filePath);    //flush the file to ensure that it's written now
    }

在示例中,我正在尝试在输出文件中只有3行,当它最终完成时,Windows资源管理器中的文件属性中的创建,修改和访问日期是相同的。

我正在使用Windows 7 Enterprise SP1 64位与。net Framework 4.5.2

直到应用程序运行结束才写入c#文件

似乎文件正在写入,问题是它没有显示在Windows资源管理器中。我在调试模式下又走了一遍,在资源管理器中检查,文件不在那里。我从变量的值中复制了文件路径,并在notepad++中打开了确切的路径,文件就在那里。接下来,文件现在显示在资源管理器中,并在每个测试场景完成后更新。

编辑:似乎问题出在

private string rootFolderPath = Directory.GetParent(@"..'..'..'..") +@"'";

在每个场景之后返回的结果与测试运行之后的结果不同。一个是在我的用户文件夹的根目录(正确)和Specflow项目文件夹上方的其他3个目录。在第一个文件夹中,它只在最后输出,但在第二个文件夹中,它在每个场景之后更新。

试试这个:

public void WriteAllTestScenarioNames(List<ScenarioResult> results, string fileName, string directoryName)
{
    results.Sort();
    Directory.CreateDirectory(rootFolderPath + directoryName);
    string filePath = rootFolderPath + directoryName + @"'" + fileName;
    FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write);
    using (System.IO.StreamWriter file = new System.IO.StreamWriter(fs))
    {
        file.WriteLine(DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString());
        foreach (var scenarioResult in results)
        {
            file.WriteLine(scenarioResult.ToString());
        }
    }
    fs.Close();
}

还要检查filePath是否正确形成,以及您是否有权在该区域写入-我怀疑它可能没有正确形成。