Перед первым .handle
добавьте заголовок, обогащенный выражением, чтобы скопировать payload
в заголовок.
Перед вторым .handle
используйте .transform()
для копирования заголовка обратно в полезную нагрузку.
Как пользователь, я хочу программное обеспечение к:
#2
невозможно, скажите мне о любых особых требованиях.Как разработчик, методы, чтобы сделать это включает:
Я проверяю ошибки, когда я открываюсь, запишите в или закройте файл. С другой стороны, я не делаю ничего в особенности для обработки "диска полные" ошибки. Вместо этого я полагаюсь на базовую ОС, чтобы сообщить о тех ошибках мне таким же образом, она сообщает о любых других типах ошибок.
Я работаю с программным обеспечением сбора данных. Так как я могу оценить размер файла, прежде чем я создам его (на основе объема данных, который требуют получать), я предупреждаю даже, прежде чем я создам файл на основе того, сколько дискового пространства существует, если я ожидаю, что выбегу из комнаты.
Важно структурировать Ваши стандартные программы постоянства, чтобы быть в блоке, который циклы, предлагая пользователю выбрать местоположение, затем пытаясь сохранить, или до данных сохраняют правильно или до пользователь, принимает решение отменить. Это кажется очевидным для меня, но я видел много приложений, которые поражают исключение, когда Вы пытаетесь сохраниться, который даже не обрабатывается и увеличивает выполнение из Вашей стандартной программы, и потеряйте свои данные в оперативной памяти.
Для расширения этого далее, там методы для обработки "диска, полного" на SQL-сервере? Никогда не должен происходить я знаю, но это может (и происходить со мной).
Я знаком с тестированием на диск, полный на автономных приложениях для ПК (выраставших программирующий в эру гибкого диска). Даже в более старой системе Unix SCO, которая была очень трудна на пространстве и заморозится, если Вы выполнили его из пространства. Не настолько знакомый с тем, что это означает в современной системе.
Вы совершенно правы. Программное обеспечение должно обработать корректно этот вид ситуации.
Можно всегда проверять IOException, чтобы видеть, полон ли диск или если пользователь имеет права записать в то местоположение.
SQL Server обрабатывает эту ситуацию, но не восстанавливается с нее. Когда диск полон..., он прекращает работать.:)
Как это часто бывает моя позиция по этому вопросу противоречит традиционным взглядам.
В целом я игнорирую out-of-disk-space тем же путем, я игнорирую из памяти. Частично, потому что невозможно надежно предсказать эти условия. Частично, потому что, когда мы говорим о поведении программного обеспечения в неожиданных условиях (как ошибка Вы не знаете, Вы имеете, какие причины Вы для еды всего диска или памяти) невозможно обосновать достаточно хорошо о ситуации, чтобы кодировать для него И ПРОТЕСТИРОВАТЬ IT. (Безопасно предположить, что, если у Вас есть код, который не тестируется, это не работает).
Однако существуют особые условия, которые указывают на другой подход:
Если Вы держите важный, несохраненный, пользовательское состояние (как текстовый файл с некоторыми редактированиями), рассматриваете предварительное сохранение данных в фоновом режиме, так, чтобы катастрофический отказ был восстанавливаемым позже.
Если Вы собираетесь записать в находящийся на диске на команде интерактивного пользователя (например, Файл-> Сохраняют), можно поймать отказ и предложить позволять им попробовать еще раз.
В любом случаи важно, чтобы ошибки были похожи на ошибки. Катастрофический отказ ошибок должен отказать. Ловля непредвиденных исключительных ситуаций и продолжение бесшумно отнимают у Вас диагностические возможности при отъезде программного обеспечения в небезопасном состоянии.
Мы только что добавили поддержку для этого в наш продукт. Работая на встроенном устройстве, мы проверяем, что дисковое пространство ниже 20% (10 МБ) каждый час, и отправляем предупреждения на офисный сервер, регистрируем проблему и предупреждаем пользователя.
Находясь в этом состоянии, мы каждые две минуты проверяем наличие свободного места размером менее 2 Мб, изящно останавливаем приложение (систему указаний) и отказываемся запускаться, пока проблема с пространством не будет решена.
Поскольку наш продукт является основной системой на рабочем месте наших клиентов, это привлекает внимание администраторов.
Если я пишу приложение, я могу каким-то образом восстановить его после сбоя ввода-вывода, но если я запускаю чужое приложение, я должен использовать другой подход, который должен освободить как можно больше дискового пространства. Я использую этот метод. Могут быть большие объемы восстанавливаемого дискового пространства: 1) небольшое количество больших файлов, спрятанных глубоко в непонятных каталогах, или 2) большое количество мелких файлов, рассредоточенных по диску, опять же в неочевидных местах. Этот метод найдет их в любом случае.
Для тестирования создайте небольшие разделы, в которых будет не хватать места в разных точках, например, как виртуальные ПК, чтобы тесты были корректными и воспроизводимыми.
Да, вероятно, это действительно плохая идея - пытаться сделать что-то "умное" для решения такого рода проблем. В основном, самое большее, что вы можете сделать, это попытаться минимизировать потери. Для интерактивных приложений с несохраненными пользовательскими данными постарайтесь избежать сбоя до того, как у пользователя появится шанс решить проблему.