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

C#在应用程序完成运行之前不会写入文件,c#,file,io,streamwriter,specflow,C#,File,Io,Streamwriter,Specflow,我正在运行一组Specflow测试,我试图在每个场景完成后将结果写入一个文件,然后在整个测试运行结束时再次写入。如果我在调试模式下运行测试,则在每个场景后都会命中此代码,但该文件仅在所有测试完成后才显示在Windows资源管理器中(或者我强制停止测试)。 下面写入文件的代码位于Specflow测试项目的单独项目中 我最初不是法拉盛,而是用这个代替StreamWriter: using (var file = new FileInfo(filePath).AppendText()) 但这不起作用

我正在运行一组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
    }
private string rootFolderPath=Directory.GetParent(@.\..\..\..\)+@“\”;
public void WriteAllTestScenarioNames(列表结果、字符串文件名、字符串目录名)
{
results.Sort();
CreateDirectory(rootFolderPath+directoryName);
字符串filePath=rootFolderPath+directoryName+@“\”+fileName;
使用(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();//刷新文件以确保它现在已写入
file.Close();//刷新文件以确保它现在已写入
}
Process.Start(filePath);//刷新文件以确保它现在已写入
}
在我尝试的示例中,当输出文件最终完成时,输出文件中只有3行,并且Windows资源管理器中文件属性中的创建、修改和访问日期是相同的


我正在将Windows 7 Enterprise SP1 64位与.NET Framework 4.5.2一起使用。文件似乎正在编写中,问题是它没有显示在Windows资源管理器中。 我在调试模式下再次进行了检查,签入了资源管理器,文件不在那里。我从变量的值复制了文件路径,并在Notepad++中打开了该路径,文件就在那里。接下来,该文件现在显示在资源管理器中,并在每个测试场景完成后更新

编辑: 看来这个问题已经解决了

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

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

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

编辑: 看来这个问题已经解决了

private string rootFolderPath = Directory.GetParent(@"..\..\..\..") +@"\";
在每个场景后返回的结果与测试运行后的结果不同。一个在我的用户文件夹(正确)的根目录中,另三个在Specflow项目文件夹之上。在第一个文件夹中,它只在最后输出,但在第二个文件夹中,它会在每个场景后更新。

尝试以下方法:

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();

}
public void WriteAllTestScenarioNames(列出结果、字符串文件名、字符串目录名)
{
results.Sort();
CreateDirectory(rootFolderPath+directoryName);
字符串filePath=rootFolderPath+directoryName+@“\”+fileName;
FileStream fs=newfilestream(filePath,FileMode.Append,FileAccess.Write);
使用(System.IO.StreamWriter文件=新的System.IO.StreamWriter(fs))
{
file.WriteLine(DateTime.Now.ToShortDateString()+“”+DateTime.Now.ToShortTimeString());
foreach(var scenarioResult in results)
{
file.WriteLine(scenarioResult.ToString());
}
}
fs.Close();
}
还要检查文件路径的格式是否正确,以及您是否有在该区域写入的权限—我怀疑它可能格式不正确

试试这个:

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();

}
public void WriteAllTestScenarioNames(列出结果、字符串文件名、字符串目录名)
{
results.Sort();
CreateDirectory(rootFolderPath+directoryName);
字符串filePath=rootFolderPath+directoryName+@“\”+fileName;
FileStream fs=newfilestream(filePath,FileMode.Append,FileAccess.Write);
使用(System.IO.StreamWriter文件=新的System.IO.StreamWriter(fs))
{
file.WriteLine(DateTime.Now.ToShortDateString()+“”+DateTime.Now.ToShortTimeString());
foreach(var scenarioResult in results)
{
file.WriteLine(scenarioResult.ToString());
}
}
fs.Close();
}

还要检查文件路径的格式是否正确,以及您是否有在该区域写入的权限—我怀疑它可能格式不正确

可能,我忘了提及,进行文件写入的类与Specflow测试项目位于不同的项目/程序集中。可能,我忘了提及,进行文件写入的类与Specflow测试项目位于不同的项目/程序集中。我确实有权在文件夹中写入,测试过程中使用的文件名和文件夹与测试结束时使用的文件名和文件夹完全相同。我发现问题似乎是Windows资源管理器没有显示文件,但我可以使用确切的文件路径在Notepad++中打开它。现在,当我运行测试时,这似乎不再是一个问题,不知道为什么。我确实有权限在文件夹中写入,测试期间使用的文件名和文件夹与在t