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

Olex

Member
03.06.2013
11
0
#1
Поможите, люди добрые. Сам я программист начинающий и все такое.
Нужно присоединять в поле 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'ом перед тем как приаттачивать в поле, но это как то громоздко, хотелось бы обойтись средствами Лотуса.
Неужели Лотус не всемогущ?
 

Мыш

Премиум
12.02.2008
1 097
10
#3
И какая кодировка используется в текстовом файле? Мож, он в UTF-8?
ЗЫ. А в дебаггере строку нормально показывает?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#4
кодировка в файле отличается от платформенной
скорее-всего - в префайх, кот. указал savl стоит что-то из европейского (судя по кракрзябрам), а в файле - вин1251
Мыш юникод далбы вопросики
 

Olex

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

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

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

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#6
использовать NotesStream, с указанием кодировки (Open)
 

Olex

Member
03.06.2013
11
0
#7
Помогите, пожалуйста, еще по одной ошибке.

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

savl

Lotus team
28.10.2011
2 136
105
#8
на винде официально полный путь 256 символов.
http://www-01.ibm.com/support/docview.wss?uid=swg21085908
WinApi до сих пор дает ограничение полного пути 260 символов, если пути в Unicode - ограничение в 32Кб буфера.

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

Olex

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

Olex

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

savl

Lotus team
28.10.2011
2 136
105
#12
Olex
Решайте уровнем регламента. Дайте распоряжение крепить файлы с диска C или D из спецпапки.
Не усложняйте и не решайте то, что не требует технического решения.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#13
О, нашел вот тут:
http://codeby.net/forum/threads/33710.html?hl=длинные+пути
Черт, похоже единственное пока решение - создавать bat-ник, который будет копировать файл в папку с более коротким именем и из нее уже аттачить.
Ну изврат же ...?
дебилизмы видовс + индусы ИБМ - это уже изврат, а хранение файлов в сложных путях и русскими именами - это изврат в N степени
сталкиваюсь с этим ежедневно - на файлопомойке в 10-ок теров хранится куча г-на, кот. теперь не в силах понять и вспомнить к-л, поиск невозможен (вследствии неумения юзверей давать метатеги)
 

Olex

Member
03.06.2013
11
0
#15
Olex
Решайте уровнем регламента. Дайте распоряжение крепить файлы с диска C или D из спецпапки.
Не усложняйте и не решайте то, что не требует технического решения.
Не уверен, что не требует.
С точки зрения людей... понять то можно.
Если пользователь может средствами ОС создать файл и положить его на диск именно используя общий путь до 256 символов, то логично ждать, что и другими программами (в том числе Лотусом) это будет нормально обрабатываться.
Ведь никакого предупреждения пользователю проводник об ошибке не сообщает.
Вставил батник, все обошел.
 

savl

Lotus team
28.10.2011
2 136
105
#16
Ведь никакого предупреждения пользователю проводник об ошибке не сообщает.
Проводник и не сообщит, а тот же файл диалог на Java или в другой проге еще как ругнется.
Ожидать можно чего угодно, но есть "технические ограничения".
Этот батник будет работать до первого неWin пользователя.
Не забывайте про запрещенные символы в именах файлов, их тоже надо будет корректировать.
 

savl

Lotus team
28.10.2011
2 136
105
#17
Кстати, прекрасно работает:
Код:
{\\?\} & files(0)
Attach без проблем.
Если в пути к файлу нет пробелов, с пробелами не пашет.