Цитата:
Сообщение от
Logger
Работает пакетная обработка (тестировали как в IL, так и в p-code)
1. Собирает информацию в аксапте.
2. Формирует в темп папке csv файл при помощи класса TextIo
3. Закрывает файл TextIo (finalize + обнуление файловой переменной, хотя после finalize она и так null)
4. Пакует csv файл в zip архив вызовом 7zip архиватора
5. Удаляет csv файл.
6. Кладет zip архив в базу аксапты.
Обнаружилась проблема: случайным образом архиватор при упаковке не может получить доступа csv файлу и поэтому создает пустой архив размером 22 байта.
Попробовал WinRar Та же проблема. Не может получить доступ к файлу.
Надо было
разморозить курицу добавить параметров архиватору

У WinRar это параметр -dh "compress files opened for writing", как щас помню, а у 7z вроде должны были подойти
Код:
-ssw : compress shared files
-sse : stop archive creating, if it can't open some input file
Правда, потом пришлось бы руками удалять csv-файлы, которые не смог бы удалить архиватор...
Цитата:
Сообщение от
Logger
В итоге заменили все вызовы TextIo на System.IO.StreamWriter
Очистку ресурсов делаем как
streamWriter.Close();
streamWriter.Dispose();
streamWriter = null;
все заработало. Архиватор всегда пакует все с одной попытки. За 2 суток ни одной проблемы.
На проектах D365FO тоже наступали на такие грабли, правда, там ситуация попроще, потому что в ядре появился класс
TextStreamIO - аналогичный TextIO, но принимающий на вход .NET-овский Stream. В итоге там работа с файлами была переделана так:
- Создать FileStream
- Создать TextStreamIO
- ... что-то делать с файлом ...
- Вызывать FileStream.Dispose()
- Вызывать TextStreamIO.finalize() и, на всякий случай, делать TextStreamIO = null.