длинные пути в имени файла-вложения

  • Автор темы Klido
  • Дата начала
K

Klido

#1
Не секрет, что многие "грамотные" пользователи любят создать N уровней папок на файловом хранилище и назвать файл пострашнее/подлиннее. Лотус при попытке приаттачить такое файло (в ртф-поле) ругается в основном "файл такой-то не найден" и вложения не делает.
Некоторое время проблема обходила меня стороной, но вот возникла ситуация, когда надо пользователям аттачить подобные файлы. И, понятно, напрячь их копировать сначала файл ручками куда-то покороче никак невозможно...
Не приходилось ли кому решать подобную проблему и каким способом?

Возможно, и не в длине пути дело - имена файлов и папок там с точками, пробелами - может такой путь лотус не хавает?


Создал не в программировании по ошибке :welcome: Как-то самому перенести можно?
 

hosm

* so what *
18.05.2009
2 442
6
#2
по теме: глючило добавление аттача лотусскриптом, когда в имени файла 2 или более !, пробелы и точки вроде как не мешали.
за ограничение по длине пути - смотрела, точно не помню, что в итоге вышло - может быть, ошибка скорее операционки, чем лотуса.
как файл аттачится - в уи на собаках?

P.S.
Создал не в программировании по ошибке sad.gif Как-то самому перенести можно?
нет, нужны права модератора раздела форума.
 
K

Klido

#3
ак файл аттачится - в уи на собаках?
простой способ - скрепка на рт-лайт поле типа аттачмент - сообщение "Файл не найден" или "Путь недоступен"
скриптом в бэкграунде по хотспоту - ошибка 4225...

что прикольно - из предыдущих моих тем про показ аттачей повторно внизу документа - вот тут внизу аттачи добавляются! :welcome: рт-поля пустые после ошибки, но вложения в документе есть и видны внизу документа ;)
 

VladSh

начинающий
Lotus team
11.12.2009
1 262
6
#4
что прикольно - из предыдущих моих тем про показ аттачей повторно внизу документа - вот тут внизу аттачи добавляются! :welcome: рт-поля пустые после ошибки, но вложения в документе есть и видны внизу документа ;)
Может РТ-поле в подформе?

Name oldName As newName - переименовывает файл/дирректорию (может не быть нужного доступа).
FileCopy - копирование файла.
 

hosm

* so what *
18.05.2009
2 442
6
#5
простой способ - скрепка на рт-лайт поле типа аттачмент - сообщение "Файл не найден" или "Путь недоступен"
с рт-лайтом с точками и пробелами в пути и имени файла с сетевого диска работает на лн7 замечательно :welcome:
посмотри в сторону ограничения на длину пути...
кстати, сколько хоть там в итоге путь получился, интересно?

внизу документа аттачи обычно, когда лотус сам аттач переименовывает. Это либо при дублировании имени, либо при наличии каких-то спецсимволов (вот у меня такое воспроизводилось с "!!" - в имя аттача писалось то, что было справа от этих символов.
по ходу - еще запятую проверь, с ней багов не помню, но чего-то проверки на нее видела)
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#6
FileCopy - копирование файла.
+1

нотесовыый диалог не хавает больше 255 символов в латинице, если кириллица, то один символ за два...
страшная папка - Мои документы )))

глючило добавление аттача лотусскриптом, когда в имени файла 2 или более !
ага, имя пропадает, если не ошибаюсь
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#8
тогда как получить имя файла, если не из диалога выбора? FileCopy над чем осуществлять?
оу... протупил )))
вроде, метод, который аттачит хавает длинные пути, а сам диалог - нет, FileCopy там в общем и не нужен, получается... давно это было...
а как же мы делали? может, забили? я уже и не помню...
кто там помнит как системный диалог выбора файла показать АПИшками?
 

nvyush

Lotus team
22.04.2009
2 317
0
#10
оу... протупил )))
вроде, метод, который аттачит хавает длинные пути, а сам диалог - нет, FileCopy там в общем и не нужен, получается... давно это было...
а как же мы делали? может, забили? я уже и не помню...
кто там помнит как системный диалог выбора файла показать АПИшками?
Что-то мне подсказывает, что Лотус как раз и вызывает системный диалог выбора файла через АПИ. Думаю, построить пользователей будет проще, чем написать свой диалог выбора файла с "неограниченной" длиной пути. По крайней мере объяснение, что это ограничение ОС, а не Лотуса должно их удовлетворить.

Добавлено
Можно рт-лайтную скрепку заменить хотспотом с ЛС-кодом, отлавливать вышеуказанную ошибку и выводить своё сообщение об ошибке с настоятельной рекомендацией переместить/переименовать файл.
 
K

Klido

#11
а как же мы делали? может, забили? я уже и не помню..
в своё время именно забили :what?: вот думал полегчало с ростом винды и лотуса в версиях, ан нет....

построить пользователей будет проще
никак нет :( террабайты файлов на файловом сервере, накопленные за годы работы... это не пройдёт :(
в фоне копировать файло в тмр и потом аттачить - единственный, пожалуй, выход...
но...
Что-то мне подсказывает, что Лотус как раз и вызывает системный диалог выбора файла через АПИ
 

nvyush

Lotus team
22.04.2009
2 317
0
#12
в своё время именно забили :what?: вот думал полегчало с ростом винды и лотуса в версиях, ан нет....


никак нет :( террабайты файлов на файловом сервере, накопленные за годы работы... это не пройдёт :(
в фоне копировать файло в тмр и потом аттачить - единственный, пожалуй, выход...
но...
Как вариант (хреновый) — наиболее востребованную глубоко зарытую папку сделать сетевым ресурсом — путь подсократится
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#13
Что-то мне подсказывает, что Лотус как раз и вызывает системный диалог выбора файла через АПИ
в том-то и дело, что лотус из него забирает только 255 символов, на сколько помню, но апишный диалог позволяет и больше...
 

vital

Больной Компом Детектед
29.01.2006
2 432
33
#14
апишный диалог позволяет и больше...
ЭЭ.. Как бе нет.. В Винде макс длина пути 256. Ограничено в API.
Ссылка 1. Простая.
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Это легко проверить</div></div><div class="sp-body"><div class="sp-content">

Создай для опыта такой вот .cmd файл:

Set MyFolder="D:\Имя папки длиной 244 символа -01234567890123456789012345678901234567890123456789012345678901234567890123456789
01234567890123456789012345678901234567890123456789012345678901234567890123456789
0
12345678901234567890123456789012345678901234567890123"
MkDir %MyFolder%
Echo Test! >> %MyFolder%\01234567890
Запусти! Теперь зайди в созданную папку (откуда угодно - из Проводника, из Far / Total Commander, из своей собственной оболочки) и попытайся создать хоть какую-то папку! Нихрена не получится! :what?:)
Итак, максимальная длина имени папки - 244 символа, попытаешься больше - получишь: "Имя файла или его расширение имеет слишком большую длину".
Внутри этой папки нельзя создавать подпапки (даже однобуквенные!), но можно создать файл, у которого Имя + Расширение <= 11 символов (больше - низя!! почему 11? 8+3 - формат DOS'овского имени).
Суммарно получается: 244 + 11 = 255 символов - открываем windows.h и видим: #define MAXPATH 256 - вах-вах-вах! Какие молодцы Мелкомягкие, не обманули на этот раз :(
Мораль: в программах под Windows для хранения имён файлов / путей для задания размера используем MAXPATH (например: char FileName[MAXPATH]) и надеемся, что в наследнице Vista - Windows 7 Vienna (или в Longhorn) MAXPATH будет увеличиваться пропорционально увеличению возможностей файловой системы ОС.
Ссылку в мсдн искать лень..
 
K

Klido

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

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#17
не знаю - можноли перехватить ошибку в форме, не пробовал
ежели можно - переключить на свой выбор (нативный ДБ)
 

TIA

:-)
Lotus team
15.05.2009
790
3
#18
сылку в мсдн искать лень..
Зря. "Проводник" же нормально работает с длинными путями.

In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. For more information, see Naming a File.
 
K

Klido

#19
вот бы кто пожертвовал готовую функцию преобразования :)