Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Проверка корректности имени папки  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
Добрый день, Уважаемые.

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

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

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

Заранее благодарен.
22 мар 16, 15:36    [18964568]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13153
AlexKB
Искал в документации на классы, да и на форуме тоже...тщетно...
Подскажите, есть что в Cache похожее (функция, метод класса, недокументированная функция)

Как вариант...
##class(%File).DirectoryExists(Path)
22 мар 16, 15:42    [18964621]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
krvsa,
я же написал, что в месте проверки такой путь вероятнее всего отсутствует, даже диск может отсутствовать, чаще всего.
22 мар 16, 15:45    [18964644]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
Сообщений: 2675
Как вариант воспользоваться NormalizeDirectory. Он вернет путь подходящий для текущей ОС, даже если он введен для другой ос, он преобразует его
USER>##class(%File).NormalizeDirectory("/opt/cache")
C:\opt\cache\
и можно сравнить этот путь с тем что ввел пользователь, если не совпало, значит не то что-то
22 мар 16, 15:45    [18964646]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
DAiMor,
Да, я пробовал этот вариант, ну и то что Вы дальше предлагаете...
Но в некоторых случаях возвращается сильно уж большое отличие...
Тяжко будет сравнивать введенное и полученное значение...
Хотелось бы возврата 0/1
Но, боюсь что придется останавливаться на таком варианте, при этом обрезав фантазии человека руками творящего...
22 мар 16, 15:54    [18964704]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
Сообщений: 2675
AlexKB
Но в некоторых случаях возвращается сильно уж большое отличие...
Интересно увидеть бы такие варианты.
22 мар 16, 15:58    [18964721]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
DAiMor,
##class(%File).NormalizeDirectory("v;")
Введите и увидите...
22 мар 16, 16:03    [18964756]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
Сообщений: 2675
AlexKB
DAiMor,
##class(%File).NormalizeDirectory("v;")
Введите и увидите...
Ну тут вполне ожидаемое поведение, и результат очевидный, пользователь ввел не верный путь.
22 мар 16, 16:15    [18964827]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
DAiMor,
Все согласно документации, только мне от этого не легче...
Придется таки мудрить...
Хотелось бы 1/0 иметь в ответе, да еще стандартной функцией...
22 мар 16, 16:19    [18964846]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13153
AlexKB
я же написал, что в месте проверки такой путь вероятнее всего отсутствует, даже диск может отсутствовать, чаще всего.

В таком случае сервер не сможет проверить то, к чему у него нет доступа.
22 мар 16, 16:50    [18965014]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
krvsa,
Так мне и не нужно, это предназначено для другой машины и другой программы.
22 мар 16, 16:57    [18965063]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
DAiMor
AlexKB
Но в некоторых случаях возвращается сильно уж большое отличие...
Интересно увидеть бы такие варианты.
По многочисленным просьбам трудящихся:
##class(%File).NormalizeDirectory("Ф:\USER\1")
22 мар 16, 17:07    [18965119]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
Сообщений: 2675
AlexKB
DAiMor
пропущено...
Интересно увидеть бы такие варианты.
По многочисленным просьбам трудящихся:
##class(%File).NormalizeDirectory("Ф:\USER\1")
О, как, это уже неожиданно
22 мар 16, 17:18    [18965183]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
DAiMor
О, как, это уже неожиданно
А так?
##class(%File).NormalizeDirectory("ФФ:\USER\1")
22 мар 16, 18:02    [18965394]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
servit,

То же самое что и в первом моем упоминании D;\USER
22 мар 16, 18:09    [18965412]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
Короче, надо писать автору...
А может еще и попросить чего...
ну там 0/1 на выходе да одной функцией...
22 мар 16, 18:10    [18965419]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13153
AlexKB
Короче, надо писать автору...

Или придумывать регулярное выражение проверки пути...
23 мар 16, 08:53    [18966931]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
AlexKB
servit,

То же самое что и в первом моем упоминании D;\USER
В Вашем первом упоминании путь получается как раз корректным:
USER>##class(%File).NormalizeDirectory("v;")
C:\InterSystems\Cache\mgr\USER\v;\
Папка v; вполне допустима (по крайней мере в Windows 7), а вот символ ":" в имени папки "ФФ:" - уже нет:
USER>##class(%File).NormalizeDirectory("ФФ:\USER\1")
C:\InterSystems\Cache\mgr\USER\ФФ:\USER\1\
23 мар 16, 09:10    [18966964]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
servit,
В самом начале я ставил вполне понятный вопрос - проверить допустимость ВВЕДЕННОГО пути, вернув ответ 1/0, а не того, что мне возвращает метод, пристыковав свои "бэбихи". Дальнейшие рассуждения о допустимости сформированного в ответ пути считаю неуместными.
Именно поэтому я не "обижаю" данный метод, просто столкнулся с жестокой необходимостью его использования с "прикруткой" собственных блох, чтобы как-то разрешить мою ситуацию.
А вот стандартная функция ( или метод ) проверки допустимости файлового пути папки хранения для разных ОС, с учетом того, что такой путь в месте проверки отсутствует, думаю была бы полезной.
23 мар 16, 09:28    [18967015]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
andrew000999
Member

Откуда:
Сообщений: 83
попробуйте
$zu(140,7,file)
23 мар 16, 11:12    [18967378]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
Александр Коблов
Member

Откуда: Краснодар, Москва
Сообщений: 240
andrew000999
попробуйте
$zu(140,7,file)
Это то же самое, что и ##class(%File).Attributes(file).
23 мар 16, 11:17    [18967415]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
andrew000999
попробуйте
$zu(140,7,file)
При чём здесь чтение атрибутов файла?
23 мар 16, 11:18    [18967424]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
Александр Коблов
Member

Откуда: Краснодар, Москва
Сообщений: 240
AlexKB,

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

Например, Regular Expression to Validate File Path and Extension
 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(fileregexpWin),1:"OK",:"NOT OK!"),!
 
}
23 мар 16, 11:24    [18967451]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1554
Александр Коблов
... регулярное выражение, которое проверяет, что строка похожа на путь к файлу.
Похоже, это максимум, на что можно рассчитывать. Какой бы "ИИ" не привлекался к проверке допустимости пути, введёт пользователь где-то не ту букву, и всё: проверка прошла, но программа не работает.
23 мар 16, 11:52    [18967625]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности папки назначения  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
AlexKB
servit,
В самом начале я ставил вполне понятный вопрос - проверить допустимость ВВЕДЕННОГО пути, вернув ответ 1/0, а не того, что мне возвращает метод, пристыковав свои "бэбихи". Дальнейшие рассуждения о допустимости сформированного в ответ пути считаю неуместными.
1. ##class(%File).NormalizeDirectory() не предназначен для валидации имени файла/папки;
2. мой первоначальный пост адресовался DAiMor, а не Вам, и совсем по другому вопросу.
AlexKB
А вот стандартная функция ( или метод ) проверки допустимости файлового пути папки хранения для разных ОС, с учетом того, что такой путь в месте проверки отсутствует, думаю была бы полезной.
Такого метода нет и вряд ли он будет создан, так как ограничения на имена файлов/папок разнятся от версии к версии даже в рамках одного семейства ОС (FAT/NTFS/Unicode/etc.):
Да даже способы обращения к файлу могут отличаться, например в Far и cmd можно создать/открыть файл с именем "C:\Temp\asd \CON\asd.txt", а вот в Проводнике он уже не открывается - возникает ошибка "Неверно задано имя папки".

Есть несколько путей решения вопроса:
1. договориться об определённом формате пути с жёсткими ограничениями на общую длину, вложенность, символы, зарезервированные имена и т.д., которые затем можно проверить через ##class(%File).GetDirectoryLength()/GetDirectoryPiece().
В этом случае Вы избежите в будущем подобных проблем;
2. если ОС, где проходит проверка, совпадает с целевой ОС, то можно временно создать папку(и) с частью пути, возможно отбросив диск. Если папка(и) создалась, значит весь путь корректный;
3. создать callout-модуль с использованием API ОС.
Alexey Maslov
Какой бы "ИИ" не привлекался к проверке допустимости пути, введёт пользователь где-то не ту букву, и всё: проверка прошла, но программа не работает.
Вы абсолютно правы:
 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(fileregexpWin),1:"OK",:"NOT OK!"),!
 
}
USER>^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 открывают файл нормально
23 мар 16, 13:55    [18968253]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности имени папки  [new]
andrew000999
Member

Откуда:
Сообщений: 83
Может быть я не правильно понимаю задачу?
Чтение атрибутов может дать многое
Может указать на существование/несуществование диска, каталога или файла

Ну и как вариант - тупо пытаемся сохранить введенный путь
при не удаче - обрабатываем ошибку
23 мар 16, 21:15    [18970522]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности имени папки  [new]
andrew000999
Member

Откуда:
Сообщений: 83
В смысле какой нибудь файл в указанный путь
23 мар 16, 21:18    [18970532]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности имени папки  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
Всем спасибо за бурные обсуждения и потраченное время!
С самого начала я пытался понять - есть ли стандартная функция, или метод класса, (может и недокументированные), но, как оказалось, нету...
То что подобные вопросы приходится решать каждому по своему мне теперь уже ясно.

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

Всем еще раз Спасибо!!!
24 мар 16, 09:07    [18971678]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности имени папки  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
andrew000999
Может быть я не правильно понимаю задачу?
Что именно здесь непонятно?
AlexKB
Человек вручную вносит путь к папке назначения для хранения файлов, а мне средствами Cache необходимо проверить, что данный путь является корректным для ОС. При этом на машине, где такая проверка будет осуществляться, данный путь может отсутствовать, даже диска, указанного в пути, может не быть... Этот путь предназначен для других машин и он туда будет отправлен.

servit,
В самом начале я ставил вполне понятный вопрос - проверить допустимость ВВЕДЕННОГО пути, вернув ответ 1/0
andrew000999
Чтение атрибутов может дать многое
Может указать на существование/несуществование диска, каталога или файла
Это ТС'у вовсе не требуется.
andrew000999
Ну и как вариант - тупо пытаемся сохранить введенный путь
при не удаче - обрабатываем ошибку
Что тоже уже было предложено (18968253), но при одном если..
Если Caché for Windows, а путь предназначен в конечном итоге для Unix/Linux/MacOS/etc., то простое сохранение уже не подойдёт. Кроме того для нужной ТС'у валидации пути потребуется передать кроме собственно пути, ещё массу доп. параметров - ОС назначения, её версию, юникодность, используемую файловую систему (, что-то ещё?), - чтобы правильно вычислить корректность пути.
24 мар 16, 09:10    [18971682]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности имени папки  [new]
andrew000999
Member

Откуда:
Сообщений: 83
извините я все-таки не правильно понял задачу
Речь идет об элементарном синтаксическом анализе строки пути, которая будет корректна для ОС??????? - и ЭТО вызывает проблему????
друзья, мне стыдно такое говорить - но там
программка на 5-6 строк для win и примерно тоже для линукс
стандартных нет - а свою функцию написать недолго
24 мар 16, 20:35    [18975196]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности имени папки  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13153
andrew000999
друзья, мне стыдно такое говорить - но там
программка на 5-6 строк для win и примерно тоже для линукс

А я Д`Артаньян!
25 мар 16, 08:11    [18976018]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности имени папки  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
andrew000999
Речь идет об элементарном синтаксическом анализе строки пути, которая будет корректна для ОС??????? - и ЭТО вызывает проблему????
Изначальной проблемой у ТС было:
AlexKB
Добрый день, Уважаемые.

Извиняюсь, если не нашел очевидное...
<...>
Искал в документации на классы, да и на форуме тоже...тщетно...

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

Заранее благодарен.
Да и потом ТС ещё раз подтвердил свою проблему:
AlexKB
Всем спасибо за бурные обсуждения и потраченное время!
С самого начала я пытался понять - есть ли стандартная функция, или метод класса, (может и недокументированные), но, как оказалось, нету...
andrew000999
друзья, мне стыдно такое говорить - но там
программка на 5-6 строк для win и примерно тоже для линукс
стандартных нет - а свою функцию написать недолго
Мне тоже стыдно говорить, что масло масляное.
25 мар 16, 09:16    [18976239]     Ответить | Цитировать Сообщить модератору
 Re: Проверка корректности имени папки  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
andrew000999
извините я все-таки не правильно понял задачу
Речь идет об элементарном синтаксическом анализе строки пути, которая будет корректна для ОС??????? - и ЭТО вызывает проблему????
друзья, мне стыдно такое говорить - но там
программка на 5-6 строк для win и примерно тоже для линукс
стандартных нет - а свою функцию написать недолго

Лично мне стыдиться нечего, поскольку я задавал вполне понятный (для адекватных людей) вопрос - есть ли стандартная функция, или метод класса для решения такой-то проблемы. А поняв что такого нету взял и написал свое.
В пять-шесть строчек можно решить многие вопросы, даже те, которые уже давно решаются стандартными функциями.

Мне это навеяло - нужно повернуть налево, но нет разрешающего знака. Тогда я вместо того чтобы спросить, а ближайший поворот будет через сто метров(как оказалось), буду поворачивать направо, петлять пять-шесть кварталов, проеду пять-шесть светофоров, разок дозаправлюсь и все-таки ЛИХО поеду в нужном мне направлении. Вот такой вот я ГЕРОЙ!

Лично для меня вызывает проблему реакция вот таких вот ВСЕЗНАЮЩИХ... (на протяжении всей моей трудовой деятельности, к сожалению).

Пожалуйста, не обижайтесь...
С уважением к Вашему мнению.
25 мар 16, 09:27    [18976297]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить