EDIT - Я написал это на машине с Linux, когда у меня не было компилятора C #.Протестировав код на компьютере с Windows, я обнаружил, что проблема, обнаруженная здесь, на самом деле намного проще, чем мои предположения.Смотрите мой другой ответ.
Вы используете несколько тем здесь?Если да, то вам нужно будет использовать другой подход.Например, вы будете страдать от состояния гонки, если два потока попытаются вызвать Add одновременно и один или оба попытаются переместить файл.
Может ли любой другой процесс переместить или заблокировать ваш файл журнала, пока ваша программаработает, и если они это сделают, ваша программа не должна аварийно завершить работу?Если это так, вам нужно будет многое изменить, так как все ваши операции ввода-вывода могут быть неудачными.
Если , то ни один из этих случаев не применим, тогда онПохоже, ваша проблема в том, что файл хранится в некоторой файловой системе, которая демонстрирует некоторую задержку между созданием файла и возможностью его просмотра.Я не думал, что это имело место с NTFS или FAT32.Вы храните файл журнала на сетевом ресурсе?Не зная больше, я не могу придумать ничего лучшего, чем использовать предложение Rockinthesixstring о тестировании, если файл существует, и если не использовать короткий вызов Sleep (), пока он не появится (или пока вы не подождете достаточно долго, чтобы что-то прояснилось)пошло не так - может быть, кто-то удалил файл из-под вас).
Обратите внимание, что если проблема связана с файловой системой , никакая блокировка в классе не поможет,и не будет вызывать Flush, потому что оператор «using» гарантирует, что StreamWriter будет удален, что закроет файл в дополнение к тому же эффекту, что и Flush, поэтому Flush является избыточным.
Все, что сказано,почему вы закрываете файл и открываете его снова все время?Чтобы убедиться, что ничего не пропало в случае сбоя вашей программы?Если это так, то вам, вероятно, лучше следовать совету jmoreno, чтобы оставить TextWriter открытым, но вызывать Flush для него после того, как вы напишите каждую строку.