Файл С# не записывается до тех пор, пока приложение не завершит работу

У меня есть набор тестов 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
    }

В примере, который я пытаюсь использовать, в выходном файле есть только 3 строки, когда он наконец завершается, а даты создания, изменения и доступа в свойствах файла в проводнике Windows идентичны.

Я использую 64-разрядную версию Windows 7 Enterprise SP1 с .NET Framework 4.5.2.


person Steve    schedule 07.09.2016    source источник
comment
возможно, я забыл упомянуть, класс, который записывает файл, находится в другом проекте/сборке, отличном от тестового проекта Specflow.   -  person Steve    schedule 07.09.2016


Ответы (2)


Кажется, файл записывается, проблема в том, что он не отображается в проводнике Windows. Прошелся еще раз в режиме отладки, проверил в проводнике, файла там нет. Я скопировал путь к файлу из значения переменной и открыл этот точный путь в Notepad++, и файл был там. После этого файл теперь отображается в проводнике и обновляется после завершения каждого тестового сценария.

Изменить: кажется, что проблема была

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

возвращал результат после каждого сценария, отличный от того, что был после тестового прогона. Один был в корне моей пользовательской папки (правильно), а остальные 3 каталога над папкой проекта Specflow. В первой папке выводится только в конце, а во второй обновляется после каждого сценария.

person Steve    schedule 07.09.2016

Попробуй это:

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

}

Также проверьте, правильно ли формируется путь к файлу и есть ли у вас разрешение на запись в этой области - я подозреваю, что он может быть сформирован неправильно.

person anil    schedule 07.09.2016
comment
У меня есть разрешение на запись в папку, точно такое же имя файла и папки используются во время тестов, как и в конце. Я обнаружил, что проблема, по-видимому, связана с тем, что проводник Windows не показывает файл, но я могу открыть его в Notepad ++, используя точный путь к файлу. Теперь, когда я запускаю тесты, это больше не проблема, не знаю почему. - person Steve; 07.09.2016