Как сбросить все файлы на жесткий диск, чтобы даже WinRAR мог их заархивировать?

Я хочу сбросить все кэшированные файлы (в частности, журналы) на жесткий диск. Когда в моем программном обеспечении возникает ошибка, я хочу получить полные файлы журнала и собрать их для отладки.

Я использую WinRAR для их сбора. (Вы можете открыть кэшированные файлы с помощью блокнота, но WinRar по какой-то причине не может их найти). Но когда возникает ошибка, и я пытаюсь просмотреть все файлы, которые интересны для отладки, он не может собрать самый последний файл журнала, который все еще открыт для добавления.

Я знаю, что мог бы использовать FlushFileBuffers для этого одного файла. Но что, если у меня есть несколько из них и другие файлы и и и и? Есть ли другой способ закончить запись файла? Неважно, если это займет слишком много времени. Это в случае ошибок / чрезвычайных ситуаций.

Редактировать:

  • Есть также некоторые изображения, которые сохраняются в случае ошибок в *.bmp.
  • я использую File.AppendText(...) для журналов.

Другое Править:

  • RAR мой последний файл журнала (решение его для меня), увидеть принятый ответ
  • чтобы сбросить все файлы, чтобы WinRar мог их архивировать, я, вероятно, должен убедиться, что все они закрыты для этой операции.

Решения:

  • Закрыть открытые файлы (работает)
  • используйте WinRar с переключателем -dh (не подтверждено)

2 ответа

Решение

Проблема не в том, что вам нужно промывать. Очистка - это процесс отправки кэшированных или буферизованных данных в их истинное место хранения. В этом случае диск.

Но ваша проблема в том, что файл открыт в режиме общего доступа, который не позволяет WinRAR добавить файл в архив. Итак, решение вашей проблемы - закрыть файл и выполнить архивирование.

Я не знаю точно, как реализованы ваши файловые операции, но вы можете унаследовать свои средства записи и другие записи в файл от IDisposable интерфейс. Это потребует от вас реализации Dispose метод, который должен вызываться каждый раз, когда объект разрушается. внутри Dispose метод, вы должны сделать все необходимое для сброса данных в файл.

Другие вопросы по тегам