在应用程序完成运行之前,不会写入C#文件

时间:2016-09-07 12:08:17

标签: c# file io streamwriter specflow

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

我原本没有冲洗,而是用StreamWriter取代了这个:

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

但这不起作用,所以在互联网上查找各种示例后,我添加了额外的Flush,Close,然后是Process.Start,更改为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
    }

在我尝试的示例中,当输出文件最终完成并且Windows资源管理器中文件属性中的Created,Modified和Accessed日期相同时,输出文件中只有3行。

我正在使用带有.NET Framework 4.5.2的Windows 7 Enterprise SP1 64位

2 个答案:

答案 0 :(得分:0)

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

编辑: 似乎问题是

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

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

答案 1 :(得分:0)

试试这个:

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是否正确形成以及您是否有权在该区域内写入 - 我怀疑它可能无法正确形成。