Как Присоединять Файлы С Русскими Именами?

Тема в разделе "Lotus - Программирование", создана пользователем Olex, 3 июн 2013.

Наш партнер Genesis Hackspace
  1. Olex

    Olex Member

    Регистрация:
    3 июн 2013
    Сообщения:
    11
    Симпатии:
    0
    Поможите, люди добрые. Сам я программист начинающий и все такое.
    Нужно присоединять в поле RTF файл. Набросал код - все работает, но только до тех пор, пока имена файлов английские.
    Открывается текстовый файл со списком файлов, которые должны быть сохранены в документы:
    Line Input #fileNum%, FileForSave
    If FileForSave<>"" Then
    Set doc = New NotesDocument( db )
    Set rtitem = New NotesRichTextItem (doc, "IncomingFile")
    Set obj = rtitem.EmbedObject (EMBED_ATTACHMENT, "", PathFromRead &"\" & FileForSave) - тут возникает ошибка
    doc.Form = "Mail"
    Call doc.Save (True,False)
    Как только попадается русское имя файла - вместо реального имени файла в FileForSave получается абракадабра, ну и, естесственно, потом файл никуда не вставляется.
    Нашел на IBM вопрос с той же ошибкой:
    http://www-10.lotus.com/ldd/nd85forum.nsf/...enDocument#main
    И похожее:
    http://www-01.ibm.com/support/docview.wss?uid=swg21284370
    Но ответов нет.
    Можно что-нибудь сделать?
    Пока приходит в голову только архивировать файл в англ. имя rar'ом перед тем как приаттачивать в поле, но это как то громоздко, хотелось бы обойтись средствами Лотуса.
    Неужели Лотус не всемогущ?
     
  2. savl

    savl Well-Known Member
    Команда форума Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.104
    Симпатии:
    155
    В Preference клиента что стоит?
     

    Вложения:

    • Как Присоединять Файлы С Русскими Именами?
      preference.png
      Размер файла:
      78,3 КБ
      Просмотров:
      134
  3. Мыш

    Мыш Well-Known Member
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.045
    Симпатии:
    10
    И какая кодировка используется в текстовом файле? Мож, он в UTF-8?
    ЗЫ. А в дебаггере строку нормально показывает?
     
  4. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.256
    Симпатии:
    318
    кодировка в файле отличается от платформенной
    скорее-всего - в префайх, кот. указал savl стоит что-то из европейского (судя по кракрзябрам), а в файле - вин1251
    Мыш юникод далбы вопросики
     
  5. Olex

    Olex Member

    Регистрация:
    3 июн 2013
    Сообщения:
    11
    Симпатии:
    0
    Всем спасибо.
    Нашел уже причину, да, список текстовых файлов создается командой dir, поэтому он в cp866.
    Исправил вставкой команды перед созданием спиcка файлов chcp 1251 - все заработало.

    Не понял (интересно было бы узнать на всякий случай) как в Лотус засасывать файлы в cp866. Пробовал ставить при открытии файла "Charset = ASCII" - не помогло.

    Обнаружил ошибку в хелпе Домино 8.5.1 в разделе "MIME Charset Names" - всюду "Cryllic languages". Загадочные индусы.
     
  6. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.256
    Симпатии:
    318
    использовать NotesStream, с указанием кодировки (Open)
     
  7. Olex

    Olex Member

    Регистрация:
    3 июн 2013
    Сообщения:
    11
    Симпатии:
    0
    Помогите, пожалуйста, еще по одной ошибке.

    Когда имена файлов стали длинными - перестал работать EmbedObject
    Set obj = rtitem.EmbedObject (EMBED_ATTACHMENT, "", FileForSave)
    возникает ошибка 4225 File <имя файла> not found.
    Экспериментальным путем установил, что если имя файла содержит русские буквы, и длина общего пути до 174 символов - работает, а вот если 175 - уже не работает.
    Это из-за двухбайтовой кодировки русских букв?
    Очень криво, т.к. пользователи выкладывают файлы в папки, и ОС это позволяет. Откуда им знать, что Лотус берет только 174 символа? Или я что то не так делаю? Может как-нибудь, кроме как орг. мерами обходится?
    Насчет 174 символов - поторопился. Иногда и меньше не схватывает (видимо, в зависимости от к-ва русских букв).
    Поставил ограничение на 128 символов пока.
    А официально сколько?
     
  8. savl

    savl Well-Known Member
    Команда форума Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.104
    Симпатии:
    155
    на винде официально полный путь 256 символов.
    http://www-01.ibm.com/support/docview.wss?uid=swg21085908
    WinApi до сих пор дает ограничение полного пути 260 символов, если пути в Unicode - ограничение в 32Кб буфера.

    Добавлено:
    Если в начало пути поставить \\?\, то путь будет в Unicode и будет ограничен 32Кб (про 32767 символов ошибка.)
     
  9. Olex

    Olex Member

    Регистрация:
    3 июн 2013
    Сообщения:
    11
    Симпатии:
    0
    savl
    Спасибо табе, белая шамана!
    Пойду пробовать.
    У меня, правда, не save, а наоборот attach к документу, но может и тут сработает.
    Не, c аттачем такое не сработало, увы.
     
  10. Olex

    Olex Member

    Регистрация:
    3 июн 2013
    Сообщения:
    11
    Симпатии:
    0
    Точно помню, что где то читал, но никак не найду где? То что Лотус скрипт может обрабатывать файлы с русскими именами не в 256 символов как винда, а чуть ли не 80?
    Кто помнит, есть ли такое ограничение?
     
  11. Olex

    Olex Member

    Регистрация:
    3 июн 2013
    Сообщения:
    11
    Симпатии:
    0
    О, нашел вот тут:
    http://codeby.net/forum/threads/33710.html?hl=длинные+пути
    Черт, похоже единственное пока решение - создавать bat-ник, который будет копировать файл в папку с более коротким именем и из нее уже аттачить.
    Ну изврат же ...?
     
  12. savl

    savl Well-Known Member
    Команда форума Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.104
    Симпатии:
    155
    Olex
    Решайте уровнем регламента. Дайте распоряжение крепить файлы с диска C или D из спецпапки.
    Не усложняйте и не решайте то, что не требует технического решения.
     
  13. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.256
    Симпатии:
    318
    дебилизмы видовс + индусы ИБМ - это уже изврат, а хранение файлов в сложных путях и русскими именами - это изврат в N степени
    сталкиваюсь с этим ежедневно - на файлопомойке в 10-ок теров хранится куча г-на, кот. теперь не в силах понять и вспомнить к-л, поиск невозможен (вследствии неумения юзверей давать метатеги)
     
  14. Мыш

    Мыш Well-Known Member
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.045
    Симпатии:
    10
    Либо через Win API - CopyFile...
     
  15. Olex

    Olex Member

    Регистрация:
    3 июн 2013
    Сообщения:
    11
    Симпатии:
    0
    Не уверен, что не требует.
    С точки зрения людей... понять то можно.
    Если пользователь может средствами ОС создать файл и положить его на диск именно используя общий путь до 256 символов, то логично ждать, что и другими программами (в том числе Лотусом) это будет нормально обрабатываться.
    Ведь никакого предупреждения пользователю проводник об ошибке не сообщает.
    Вставил батник, все обошел.
     
  16. savl

    savl Well-Known Member
    Команда форума Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.104
    Симпатии:
    155
    Проводник и не сообщит, а тот же файл диалог на Java или в другой проге еще как ругнется.
    Ожидать можно чего угодно, но есть "технические ограничения".
    Этот батник будет работать до первого неWin пользователя.
    Не забывайте про запрещенные символы в именах файлов, их тоже надо будет корректировать.
     
  17. savl

    savl Well-Known Member
    Команда форума Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.104
    Симпатии:
    155
    Кстати, прекрасно работает:
    Код (LotusScript):
    {\\?\} & files(0)
    Attach без проблем.
    Если в пути к файлу нет пробелов, с пробелами не пашет.
     
Загрузка...

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