• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

NotesRichTextItem.EmbedObject: ограничение на длину имени файла

  • Автор темы FixeR
  • Дата начала
F

FixeR

Давно уже мучает следующая проблема.

У класса NotesRichTextItem есть метод EmbedObject, который можно использовать для присоединения файла к документу. В качестве одного из аргументов указывается путь к файлу. На длину пути есть ограничение - MAX_PATH = 260 символов (для Win).
Баг в следующем: русские символы в пути учитываются за ДВА.
Т.е. реальное ограничение на длину пути с русскими символами получается существенно меньше.

Тоже самое с notesEmbeddedObject.ExtractFile(path$) - извлечение файла.

Кто-нибудь знает, можно ли это починить?
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
конечно - не использовать длинные пути :(
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Давно уже мучает следующая проблема.

У класса NotesRichTextItem есть метод EmbedObject, который можно использовать для присоединения файла к документу. В качестве одного из аргументов указывается путь к файлу. На длину пути есть ограничение - MAX_PATH = 260 символов (для Win).
Баг в следующем: русские символы в пути учитываются за ДВА.
Т.е. реальное ограничение на длину пути с русскими символами получается существенно меньше.

Тоже самое с notesEmbeddedObject.ExtractFile(path$) - извлечение файла.

Кто-нибудь знает, можно ли это починить?
Ну не сказал бы что это баг... кирилица всегда занимала 2 байта вместо одного латиницы.
Ну а чтоб совсем все классно было - правило 8 + . + 3
 
F

FixeR

конечно - не использовать длинные пути
Для нас это очень важно.

Ну не сказал бы что это баг... кириллица всегда занимала 2 байта вместо одного латиницы.
Да. В том-то и дело, что Lotus почему-то считает ограничение в байтах.
А надо бы - в символах, как в самой Windows.
 
O

Olex

Поможите, люди добрые. Сам я программист начинающий и все такое.
Нужно присоединять в поле 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 вопрос с той же ошибкой:

И похожее:

Но ответов нет.
Можно что-нибудь сделать?
Пока приходит в голову только архивировать файл в англ. имя rar'ом перед тем как приаттачивать в поле, но это как то громоздко, хотелось бы обойтись средствами Лотуса.
Неужели Лотус не всемогущ?
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
179
В Preference клиента что стоит?
 

Вложения

  • preference.png
    preference.png
    23,9 КБ · Просмотры: 545

Мыш

Lotus Team
12.02.2008
1 219
29
BIT
66
И какая кодировка используется в текстовом файле? Мож, он в UTF-8?
ЗЫ. А в дебаггере строку нормально показывает?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
214
кодировка в файле отличается от платформенной
скорее-всего - в префайх, кот. указал savl стоит что-то из европейского (судя по кракрзябрам), а в файле - вин1251
Мыш юникод далбы вопросики
 
O

Olex

Всем спасибо.
Нашел уже причину, да, список текстовых файлов создается командой dir, поэтому он в cp866.
Исправил вставкой команды перед созданием спиcка файлов chcp 1251 - все заработало.

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

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
214
использовать NotesStream, с указанием кодировки (Open)
 
O

Olex

Помогите, пожалуйста, еще по одной ошибке.

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

savl

Lotus Team
28.10.2011
2 597
310
BIT
179
на винде официально полный путь 256 символов.

WinApi до сих пор дает ограничение полного пути 260 символов, если пути в Unicode - ограничение в 32Кб буфера.

Добавлено:
Если вкратце, то да, существует в WinAPI ограничение на максимальную длину пути MAX_PATH, равная 260 символам. Обойти его можно, обращаясь к файлам/папкам через префикс \\?\ (максимальная длина пути в таком случае - 32 767 символов). То есть, например, mkdir "\\?\C:\very-very-very\long-long\path\filename.ext"
Если в начало пути поставить \\?\, то путь будет в Unicode и будет ограничен 32Кб (про 32767 символов ошибка.)
 
O

Olex

savl
Спасибо табе, белая шамана!
Пойду пробовать.
У меня, правда, не save, а наоборот attach к документу, но может и тут сработает.
Не, c аттачем такое не сработало, увы.
 
O

Olex

Точно помню, что где то читал, но никак не найду где? То что Лотус скрипт может обрабатывать файлы с русскими именами не в 256 символов как винда, а чуть ли не 80?
Кто помнит, есть ли такое ограничение?
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
179
Olex
Решайте уровнем регламента. Дайте распоряжение крепить файлы с диска C или D из спецпапки.
Не усложняйте и не решайте то, что не требует технического решения.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
214
О, нашел вот тут:
https://codeby.net/threads/33710.html?hl=длинные+пути
Черт, похоже единственное пока решение - создавать bat-ник, который будет копировать файл в папку с более коротким именем и из нее уже аттачить.
Ну изврат же ...?
дебилизмы видовс + индусы ИБМ - это уже изврат, а хранение файлов в сложных путях и русскими именами - это изврат в N степени
сталкиваюсь с этим ежедневно - на файлопомойке в 10-ок теров хранится куча г-на, кот. теперь не в силах понять и вспомнить к-л, поиск невозможен (вследствии неумения юзверей давать метатеги)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!