Временные файлы

Тема в разделе "Lotus - Программирование", создана пользователем garrick, 8 сен 2016.

  1. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    770
    Симпатии:
    50
    Бывает, что в процессе работы надо создать временный файл. Не проблема если ваш код (агент) сможет его потом сам удалить, но иногда надо этот файл отдать пользователю, например при генерации PDF или Excel файлов - открыть их в соответствующем приложении, отображающем их содержимое. Удалить такой файл ваш агент самостоятельно уже не сможет. Они копятся, копятся ...и, бах! место на диске кончилось. Утрирую, конечно, но вдруг...

    Выдалась свободная минутка и озадачился решить эту проблему. После вскрытия пациента и анализа содержимого было выявлено, что Lotus Notes в своём временном каталоге создаёт файл ~notetmp.reg, куда записывает все свои временные файлы. При закрытии Lotus Notes пытается эти файлы удалить. Если не получилось, то пытается сделать это ещё раз при последующем запуске.

    Стало быть для того, чтобы наши временные файлы были более-менее успешно удалены и пользователи не ругались на программистов нехорошими словами, что они им все жесткие диски чем-то загадили, надо записать имена наших временных файлов в лотусовый ~notetmp.reg - пусть он за нас их и удаляет. Сам же ~notetmp.reg не простой текстовый файл, но нас этим не напугаешь :)

    Готовое решение здесь

    Пример использования:
    Код (Java):

    Session session = NotesFactory.createSession();
    NotesTempFile tempFile = new NotesTempFile(session);
    File file = tempFile.getTempFile("pdf");
     
    lmike нравится это.
  2. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    интересная логика.
    Создать файл агент может, а удалить нет? Это как?
     
  3. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    770
    Симпатии:
    50
    Последняя строка в агенте
    Код (Text):

    Desktop desktop = Desktop.getDesktop();
    desktop.open(file);
    если файл сразу удалить, то он не откроется в внешнем приложении, а потом агента уже не будет в живых.
     
  4. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Прикрепленный файл по определению будет регистрироваться для удаления, а смысл регистрировать файл для удаления, если он создается пользователем сознательно?
    не, ну каждый сходит с ума по своему...
     
  5. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    770
    Симпатии:
    50
    Может я в чём-то не прав, просвятите меня, пожалуйста. Есть агент, который формирует что-то в PDF, Excel, Word и т.п. Для этого используется временный файл, который после окончания формирования отрывается на рабочем месте пользователя в Arcobat Rerader, Excel, Word и т.п. для просмотра, редактирования, печати. После того как пользователь сделал своё дело, он просто закрыл приложение через которое смотрел или распечатывал файл. И как потом удалить такой файл? Или пусть копятся - жесткие диски нынче большие? :)

    У меня таких агентов много, они формируют всякие печатные формы, отчёты и пр., запускаются пользователями часто, временные каталоги засоряются очень быстро. Может быть я что-то делаю не так?
     
  6. Domino-Designer

    Domino-Designer Lotus team
    Lotus team

    Регистрация:
    6 дек 2011
    Сообщения:
    117
    Симпатии:
    4
    Гарри, это был мой бифштэкс! (с) Человек с бульвара Капуцинов.

    Только 1 вопрос к топикстартеру: Вы оказались крайним в вопросе кэширования фотографий, видио, 1С и т.д. и т.п.?
    Можем оказать психологическую помощь, на большее.... не, ну нальём конечно ...


    ЗЫЖ От Игоря не ожидал такого
    package com.github.igor_kudryashov.utils.notes;
     
    #6 Domino-Designer, 8 сен 2016
    Последнее редактирование: 8 сен 2016
  7. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    @garrick попробуй открывать через :
    Код (Java):
    Process p = Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + FileObj.getAbsolutePath());
    p.waitFor();
    Вроде должен ждать закрытия файла, но так как это отдельный поток, то клиент не фризится.
     
  8. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Файлы, создаваемые пользователем сознательно, - это не временные файлы.
     
  9. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    795
    Симпатии:
    78
    result - диски большие, всем пофиг))
     
  10. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    770
    Симпатии:
    50
    Перечитал несколько раз очень внимательно. Ничего не понял.
     
  11. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Так в этом-то и суть. Что регистрировать, если это сознательно?
     
  12. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    если запустили несколько раз и файлы не закрыли?
    неустойчивая ситуация...
    не понимаю - в чем "укор" ТС от остальных?
    временные файлы могут не удаляться по разным причинам, на компе юзера...
    упало приложение/лочится файл АВ... и нотусня - рядовое приложение, кот. не может ситуацию контролировать
    Предложенный вариант, лично мне, нравится
     
  13. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    файлы создаются приложением и открываются юзеру в интерактиве, для дальнейшего воздействия (кот. нотусня уже не должна котролировать)
    но сами файлы открываются из ФС (например), при этом существуют в приложенном варианте, к доку нотусни
    т.е - после неких манипуляций, вне нотусни, они в ФС не нужны
     
  14. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    У меня открывали по 10-15 pdf и норм.
    Если имена файлов будут разные, что для временных файлов должно быть именно так, то ничего не будет. Ну или рухнет клиент, когда память "выжрется".
    Если файлы не закрыли, но закрыли лотус - файлы должны закрыться, но они не удалятся.
    Если клиент рухнет, то сценарий закрытия клиента отработает.

    Про notestemp.reg не знал, прикольно, беру на вооружение.
    Вот только есть одна трабла, в какой-то версии 9-ки это не срабатывало удаление при закрытии клиента, потом вроде вернули + настройка в ini.
    Точняк, поправили в FP6 только:
    но у меня как была куча файлов из ПЯ - так и оставалась... Сейчас не актуально.
     
  15. Domino-Designer

    Domino-Designer Lotus team
    Lotus team

    Регистрация:
    6 дек 2011
    Сообщения:
    117
    Симпатии:
    4
    Вы, извините, дурью маетесь. Как выше было сказано "каждый сходит с ума по своему" NickProstoNick(с) Это он еще вежливый.

    я вам хотел намекнуть, что не лотус виноват в загрузке трэша, там много кто отмечается, с какого перепоя лотус виноват?
     
    NickProstoNick нравится это.
  16. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    а такое было?
    ситуация предельно проста - приложение создало файл в ФС и этот файл открыли системным приложением, для юзера, для дальнейших действий...
    что здесь странного?
    Далее... код перестал отслеживать файл - это нормально, ибо им занимается уже постороннее приложение
    Для приложения нотусни этот файл "временный", предложено его удалять как временный, механизмами нотусни
    Что не так?
     
  17. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    пользователь не создает файл сознательно и даже не знает - где он расположен, ему предоставляют возможность визуализации информации в системном приложении, для дальнейших действий
     
  18. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    770
    Симпатии:
    50
    Вижу не все поняли причину моего беспокойства на счёт временных файлов, а также природу их появления. Попробую объяснить на пальцах. Вы же видели в каком-нибудь М-Видео или Техносиле как продают технику в кредит. Человек с той стороны компьютера забивает в него ваши данные и говорит, что надо некоторое время подождать одобрения. В случае положительного решения банка он распечатывает пакет документов и даёт их вам на подпись. В зависимости от типа кредита количество документов может быть от 3-5 и более. Как минимум кредитный договор+график погашения кредита+соглашение о персональных данных и +, скорее всего, ещё какая-нибудь инструкция о том как гасить кредит+вам постараются впарить какую-нибудь левую страховку или дополнительную гарантию+ещё чего нибудь. И представьте себе, что там стоит Lotus Notes. Т.е. ваш агент в Lotus Notes генерит все эти документы, создавая обычные временные файлы во временном каталоге OS. Затем открывает их в Acrobat Reader, чтобы можно было распечатать, и на этом завершает свою работу. Дальнейшая судьба этих временных файлов неведома ни вашему агенту, ни Lotus Notes, ни тем более Acrobat Reader. Когда именно пользователь распечатает их и закроет Acrobat Reader неизвестно. За рабочую смену такое рабочее место обычно обслуживает 50-70 клиентов. Это 250-300 временных файлов (каждый день). Они копятся, копятся, копятся... Ведь тот человек, с той стороны компьютера, вообще не знает что такое временные файлы, временный каталог Windows и где это находится. А как вы думаете, какое количество файлов в одном каталоге безболезнено сможет выдержать Windows? Не теоретически, а на практике?

    Теперь попробуйте предложить своё решение по своевременной чистке временного каталога от "мусора", который нагенерил ваш агент.

    @savl держать 200-300 открытых процессов, ожидающих завершение, запущенной через rundll32 программы, мне кажется не рационально. Тем более, как мне кажется, это будет аналогичное количество "зависших" агентов. При каком счёте они перестанут вообще запускаться без всяких сообщениях об ошибках?
     
  19. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Ну это не совсем верно, чтобы 200-300 процессов висело, эти документы надо держать на экране... А так, после закрытия поток освобождает файл, тут его можно и снести.
    Но, как уже написал выше, мне Ваш вариант больше нравится.
     
  20. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Агент создает файл, цепляет его в документ и удаляет файл с диска. Все. Больше ничего не надо.
    При открытии из документа файл автоматом зарегится для удаления.
    Да, добавится лишний клик для пользователя, но решит массу проблем для разработчика.
    Так что для чего этот велосипед - не ясно
     
Загрузка...
Похожие Темы - Временные файлы
  1. Akupaka
    Ответов:
    7
    Просмотров:
    3.496
  2. admin
    Ответов:
    1
    Просмотров:
    2.713
  3. lmike
    Ответов:
    27
    Просмотров:
    239
  4. sgfsdg
    Ответов:
    1
    Просмотров:
    423
  5. vovanabali
    Ответов:
    0
    Просмотров:
    531

Поделиться этой страницей