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

Тема в разделе "Lotus - Программирование", создана пользователем Klido, 19 янв 2010.

  1. Klido

    Klido Гость

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

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


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

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    по теме: глючило добавление аттача лотусскриптом, когда в имени файла 2 или более !, пробелы и точки вроде как не мешали.
    за ограничение по длине пути - смотрела, точно не помню, что в итоге вышло - может быть, ошибка скорее операционки, чем лотуса.
    как файл аттачится - в уи на собаках?

    P.S.
    нет, нужны права модератора раздела форума.
     
  3. Klido

    Klido Гость

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

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

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

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Может РТ-поле в подформе?

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

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    с рт-лайтом с точками и пробелами в пути и имени файла с сетевого диска работает на лн7 замечательно :welcome:
    посмотри в сторону ограничения на длину пути...
    кстати, сколько хоть там в итоге путь получился, интересно?

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

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    +1

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

    ага, имя пропадает, если не ошибаюсь
     
  7. Klido

    Klido Гость

    тогда как получить имя файла, если не из диалога выбора? FileCopy над чем осуществлять?
     
  8. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    оу... протупил )))
    вроде, метод, который аттачит хавает длинные пути, а сам диалог - нет, FileCopy там в общем и не нужен, получается... давно это было...
    а как же мы делали? может, забили? я уже и не помню...
    кто там помнит как системный диалог выбора файла показать АПИшками?
     
  9. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    имя файла в OpenFileDialog режется?
     
  10. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Что-то мне подсказывает, что Лотус как раз и вызывает системный диалог выбора файла через АПИ. Думаю, построить пользователей будет проще, чем написать свой диалог выбора файла с "неограниченной" длиной пути. По крайней мере объяснение, что это ограничение ОС, а не Лотуса должно их удовлетворить.

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

    Klido Гость

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

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

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Как вариант (хреновый) — наиболее востребованную глубоко зарытую папку сделать сетевым ресурсом — путь подсократится
     
  13. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    в том-то и дело, что лотус из него забирает только 255 символов, на сколько помню, но апишный диалог позволяет и больше...
     
  14. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.469
    Симпатии:
    27
    ЭЭ.. Как бе нет.. В Винде макс длина пути 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 будет увеличиваться пропорционально увеличению возможностей файловой системы ОС.
    Ссылку в мсдн искать лень..
     
  15. Klido

    Klido Гость

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

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    а, таки да... а может у меня проблема была только из-за кириллических символов? все забыл... ((
     
  17. lmike

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

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

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Зря. "Проводник" же нормально работает с длинными путями.

    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.
     
  19. Klido

    Klido Гость

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

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
Загрузка...

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