powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Проверка корректности имени папки
25 сообщений из 33, страница 1 из 2
Проверка корректности имени папки
    #39198078
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, Уважаемые.

Извиняюсь, если не нашел очевидное...
Человек вручную вносит путь к папке назначения для хранения файлов, а мне средствами Cache необходимо проверить, что данный путь является корректным для ОС. При этом на машине, где такая проверка будет осуществляться, данный путь может отсутствовать, даже диска, указанного в пути, может не быть... Этот путь предназначен для других машин и он туда будет отправлен.

Искал в документации на классы, да и на форуме тоже...тщетно...

Подскажите, есть что в Cache похожее (функция, метод класса, недокументированная функция), может у меня просто глаз замылился...

Заранее благодарен.
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198090
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKBИскал в документации на классы, да и на форуме тоже...тщетно...
Подскажите, есть что в Cache похожее (функция, метод класса, недокументированная функция)
Как вариант...
Код: plaintext
##class(%File).DirectoryExists(Path)
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198095
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,
я же написал, что в месте проверки такой путь вероятнее всего отсутствует, даже диск может отсутствовать, чаще всего.
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198096
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант воспользоваться NormalizeDirectory . Он вернет путь подходящий для текущей ОС, даже если он введен для другой ос, он преобразует его
Код: plaintext
1.
USER>w ##class(%File).NormalizeDirectory("/opt/cache")
C:\opt\cache\
и можно сравнить этот путь с тем что ввел пользователь, если не совпало, значит не то что-то
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198109
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
Да, я пробовал этот вариант, ну и то что Вы дальше предлагаете...
Но в некоторых случаях возвращается сильно уж большое отличие...
Тяжко будет сравнивать введенное и полученное значение...
Хотелось бы возврата 0/1
Но, боюсь что придется останавливаться на таком варианте, при этом обрезав фантазии человека руками творящего...
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198114
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKBНо в некоторых случаях возвращается сильно уж большое отличие...Интересно увидеть бы такие варианты.
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198119
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
Код: plaintext
w ##class(%File).NormalizeDirectory("v;")
Введите и увидите...
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198133
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKBDAiMor,
Код: plaintext
w ##class(%File).NormalizeDirectory("v;")
Введите и увидите...Ну тут вполне ожидаемое поведение, и результат очевидный, пользователь ввел не верный путь.
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198136
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
Все согласно документации, только мне от этого не легче...
Придется таки мудрить...
Хотелось бы 1/0 иметь в ответе, да еще стандартной функцией...
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198161
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKBя же написал, что в месте проверки такой путь вероятнее всего отсутствует, даже диск может отсутствовать, чаще всего.
В таком случае сервер не сможет проверить то, к чему у него нет доступа.
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198163
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,
Так мне и не нужно, это предназначено для другой машины и другой программы.
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198171
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorAlexKBНо в некоторых случаях возвращается сильно уж большое отличие...Интересно увидеть бы такие варианты.По многочисленным просьбам трудящихся:
Код: plaintext
w ##class(%File).NormalizeDirectory("Ф:\USER\1")
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198177
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKBDAiMorпропущено...
Интересно увидеть бы такие варианты.По многочисленным просьбам трудящихся:
Код: plaintext
w ##class(%File).NormalizeDirectory("Ф:\USER\1")
О, как, это уже неожиданно
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198227
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorО, как, это уже неожиданноА так?
Код: plaintext
w ##class(%File).NormalizeDirectory("ФФ:\USER\1")
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198233
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,

То же самое что и в первом моем упоминании D;\USER
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198237
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, надо писать автору...
А может еще и попросить чего...
ну там 0/1 на выходе да одной функцией...
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198484
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKBКороче, надо писать автору...
Или придумывать регулярное выражение проверки пути...
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198493
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKBservit,

То же самое что и в первом моем упоминании D;\USERВ Вашем первом упоминании путь получается как раз корректным:
Код: plaintext
1.
USER>w ##class(%File).NormalizeDirectory("v;")
C:\InterSystems\Cache\mgr\USER\v;\
Папка v; вполне допустима (по крайней мере в Windows 7), а вот символ ":" в имени папки "ФФ:" - уже нет:
Код: plaintext
1.
USER>w ##class(%File).NormalizeDirectory("ФФ:\USER\1")
C:\InterSystems\Cache\mgr\USER\ФФ:\USER\1\
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198505
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,
В самом начале я ставил вполне понятный вопрос - проверить допустимость ВВЕДЕННОГО пути, вернув ответ 1/0, а не того, что мне возвращает метод, пристыковав свои "бэбихи". Дальнейшие рассуждения о допустимости сформированного в ответ пути считаю неуместными.
Именно поэтому я не "обижаю" данный метод, просто столкнулся с жестокой необходимостью его использования с "прикруткой" собственных блох, чтобы как-то разрешить мою ситуацию.
А вот стандартная функция ( или метод ) проверки допустимости файлового пути папки хранения для разных ОС, с учетом того, что такой путь в месте проверки отсутствует, думаю была бы полезной.
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198609
andrew000999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробуйте
$zu(140,7,file)
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198615
Александр Коблов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrew000999попробуйте
$zu(140,7,file)Это то же самое, что и ##class(%File).Attributes(file).
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198616
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrew000999попробуйте
$zu(140,7,file)При чём здесь чтение атрибутов файла?
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198620
Александр Коблов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKB,

Я бы нашёл в гугле (или написал сам) регулярное выражение, которое проверяет, что строка похожа на путь к файлу.

Например, Regular Expression to Validate File Path and Extension
Код: plaintext
1.
2.
3.
 set regexpWin = "^(?:[\w]\:|\\)(\\[a-z_\-\s0-9\.]+)+\.(txt|gif|pdf|doc|docx|xls|xlsx)$"
 for file = "c:\my folder\abc abc.docx","c:\my-folder\another_folder\abc.v2.docx", "c:\my folder\another_folder\.docx" {
   write file," ", $case($Match(file, regexpWin),1:"OK",:"NOT OK!"),!
 }
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198654
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Коблов... регулярное выражение, которое проверяет, что строка похожа на путь к файлу.Похоже, это максимум, на что можно рассчитывать. Какой бы "ИИ" не привлекался к проверке допустимости пути, введёт пользователь где-то не ту букву, и всё: проверка прошла, но программа не работает.
...
Рейтинг: 0 / 0
Проверка корректности имени папки
    #39198789
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKBservit,
В самом начале я ставил вполне понятный вопрос - проверить допустимость ВВЕДЕННОГО пути, вернув ответ 1/0, а не того, что мне возвращает метод, пристыковав свои "бэбихи". Дальнейшие рассуждения о допустимости сформированного в ответ пути считаю неуместными.1. ##class(%File).NormalizeDirectory() не предназначен для валидации имени файла/папки;
2. мой первоначальный пост адресовался DAiMor, а не Вам, и совсем по другому вопросу.AlexKBА вот стандартная функция ( или метод ) проверки допустимости файлового пути папки хранения для разных ОС , с учетом того, что такой путь в месте проверки отсутствует, думаю была бы полезной.Такого метода нет и вряд ли он будет создан, так как ограничения на имена файлов/папок разнятся от версии к версии даже в рамках одного семейства ОС (FAT/NTFS/Unicode/etc.):C:\Temp\asd \CON\asd.txt ", а вот в Проводнике он уже не открывается - возникает ошибка "Неверно задано имя папки".

Есть несколько путей решения вопроса:
1. договориться об определённом формате пути с жёсткими ограничениями на общую длину, вложенность, символы, зарезервированные имена и т.д., которые затем можно проверить через ##class(%File). GetDirectoryLength ()/ GetDirectoryPiece ().
В этом случае Вы избежите в будущем подобных проблем;
2. если ОС, где проходит проверка, совпадает с целевой ОС, то можно временно создать папку(и) с частью пути, возможно отбросив диск. Если папка(и) создалась, значит весь путь корректный;
3. создать callout-модуль с использованием API ОС.Alexey MaslovКакой бы "ИИ" не привлекался к проверке допустимости пути, введёт пользователь где-то не ту букву, и всё: проверка прошла, но программа не работает.Вы абсолютно правы:
Код: plaintext
1.
2.
3.
 set regexpWin = "^(?:[\w]\:|\\)(\\[a-z_\-\s0-9\.]+)+\.(txt|gif|pdf|doc|docx|xls|xlsx)$"
 for file = "c:\temp\\\123\test.txt","file:\\c:\Temp\123\test.txt","\\?\c:\temp\123\test.txt" {
  write file," ", $case($Match(file, regexpWin),1:"OK",:"NOT OK!"),!
 }
Код: plaintext
1.
2.
3.
USER>d ^testRegExp
c:\temp\\\123\test.txt NOT OK! Тем не менее cmd и Far открывают файл нормально
file:\\c:\Temp\123\test.txt NOT OK! Тем не менее Проводник и Far открывают файл нормально
\\?\c:\temp\123\test.txt NOT OK! Тем не менее Проводник и Far открывают файл нормально
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Проверка корректности имени папки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]