在应用程序完成之前不会写入 C# 文件 运行
C# file not being written to until the application finishes running
我有一组 Specflow 测试,我正在 运行ning 并且我试图在每个场景完成后将到目前为止的结果写入一个文件,然后我再次写入整个测试结束运行。如果我 运行 在调试模式下进行测试,则在每个场景后都会触发此代码,但文件仅在所有测试完成后才出现在 Windows 资源管理器中(或者我强制测试停止)。
下面写入文件的代码位于 Specflow 测试项目的单独项目中。
我本来不冲水,用这个代替了 StreamWriter:
using (var file = new FileInfo(filePath).AppendText())
但那是行不通的,所以在互联网上查找各种示例后,我添加了额外的 Flush、Close,然后 Process.Start,更改为 StreamWriter,其中 none 有所帮助。当前仍然无效的代码是:
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
似乎正在写入文件,问题是它没有显示在 Windows 资源管理器中。
我在调试模式下再次单步执行,在资源管理器中检查,该文件不存在。我从变量的值中复制了文件路径,并在 Notepad++ 中打开了确切的路径,文件就在那里。随后文件现在显示在资源管理器中并在每个测试场景完成后更新。
编辑:
看来问题是
private string rootFolderPath = Directory.GetParent(@"..\..\..\..") +@"\";
在每个场景后返回的结果与测试 运行 后的结果不同。一个位于我的用户文件夹的根目录(正确),另外 3 个目录位于 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();
}
还要检查 filePath 的格式是否正确以及您是否有权在该区域写入 - 我怀疑它可能没有正确格式。
我有一组 Specflow 测试,我正在 运行ning 并且我试图在每个场景完成后将到目前为止的结果写入一个文件,然后我再次写入整个测试结束运行。如果我 运行 在调试模式下进行测试,则在每个场景后都会触发此代码,但文件仅在所有测试完成后才出现在 Windows 资源管理器中(或者我强制测试停止)。 下面写入文件的代码位于 Specflow 测试项目的单独项目中。
我本来不冲水,用这个代替了 StreamWriter:
using (var file = new FileInfo(filePath).AppendText())
但那是行不通的,所以在互联网上查找各种示例后,我添加了额外的 Flush、Close,然后 Process.Start,更改为 StreamWriter,其中 none 有所帮助。当前仍然无效的代码是:
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
似乎正在写入文件,问题是它没有显示在 Windows 资源管理器中。 我在调试模式下再次单步执行,在资源管理器中检查,该文件不存在。我从变量的值中复制了文件路径,并在 Notepad++ 中打开了确切的路径,文件就在那里。随后文件现在显示在资源管理器中并在每个测试场景完成后更新。
编辑: 看来问题是
private string rootFolderPath = Directory.GetParent(@"..\..\..\..") +@"\";
在每个场景后返回的结果与测试 运行 后的结果不同。一个位于我的用户文件夹的根目录(正确),另外 3 个目录位于 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();
}
还要检查 filePath 的格式是否正确以及您是否有权在该区域写入 - 我怀疑它可能没有正确格式。