Валидация имени файла или каталога

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Валидация имени файла или каталога

Сообщение zi000000 » 13.06.2017 23:01:02

Здравствуйте!
Искал в исходном коде, но не нашёл, есть ли в lazarus процедуры/функции:
1. для определения валидности имени файла или каталога?
2. для приведения строки к валидному (не содержащему запрещённых символов) виду?

Нечто похожее на это: http://docwiki.embarcadero.com/Libraries/Berlin/en/System.IOUtils.TPath

Реализовать не сложно, но если есть "из коробки", то незачем.
zi000000
новенький
 
Сообщения: 24
Зарегистрирован: 28.04.2016 19:55:49

Re: Валидация имени файла или каталога

Сообщение AVD » 14.06.2017 10:32:34

В модуле Masks есть ф. MatchesMask - Проверка соответствия имени файла шаблону маски.
Может подойдет?
AVD
незнакомец
 
Сообщения: 5
Зарегистрирован: 10.06.2017 21:44:18

Re: Валидация имени файла или каталога

Сообщение Лекс Айрин » 14.06.2017 10:34:36

zi000000 писал(а):не содержащему запрещённых символов


что, по вашему мнению, есть запрещенные символы? Те, которые не позволяют открыть файл/каталог?
Если речь о неправильной кодировке файлов, то это обычные процедуры смены кодировки (т. к. имя файла есть обычная строка). Если повреждена сама запись в файловой системе, то тут не факт, что стоит вообще браться -- есть шанс, что не удастся угадать формат файла и тогда все равно придется исследовать его в 16ричном виде или специальной программе. Если просто убрать эти символы, то это третий подход.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4088
Зарегистрирован: 19.02.2013 16:54:51

Re: Валидация имени файла или каталога

Сообщение zi000000 » 14.06.2017 11:15:22

Лекс Айрин
Например для windows, запрещёнными символами в имени файла или каталога являются: *|\:"<>?/

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

п.с. Уточню. Речь идёт о создании файла или каталога с заданным пользователем именем.
zi000000
новенький
 
Сообщения: 24
Зарегистрирован: 28.04.2016 19:55:49

Re: Валидация имени файла или каталога

Сообщение Лекс Айрин » 14.06.2017 11:19:46

zi000000, насколько я знаю... нет. Система просто не должна позволять создания таких файлов. Или переименования. И проверка валидности имени файла ложится на плечи программиста и/или соответствующего диалога.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4088
Зарегистрирован: 19.02.2013 16:54:51

Re: Валидация имени файла или каталога

Сообщение zi000000 » 14.06.2017 11:38:16

Лекс Айрин писал(а):проверка валидности имени файла ложится на плечи программиста

Сейчас так и есть. Спасибо.

Добавлено спустя 8 минут 19 секунд:
Я пришёл в Lazarus из Delphi.
Добавлю ссылку, пригодится кому-нибудь: http://www.webdelphi.ru/2010/06/beglyj- ... lyuchenie/
zi000000
новенький
 
Сообщения: 24
Зарегистрирован: 28.04.2016 19:55:49

Re: Валидация имени файла или каталога

Сообщение Лекс Айрин » 14.06.2017 11:46:44

zi000000, да не за что.

Добавлено спустя 4 минуты 9 секунд:
Вообще, никогда не помешает делать подобные проверки, если только имя не получено из источника делающего их самостоятельно.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4088
Зарегистрирован: 19.02.2013 16:54:51

Re: Валидация имени файла или каталога

Сообщение mig-31 » 14.06.2017 12:07:17

FreePascal поддерживает больше платформ, чем Delphi - реализация этой функции будет более сложная.
Запрещенные символы в имени файла даны не платформой, а типом файловой системы.
Вначале надо определить тип файловой системы: ext4, reiserfs, brtfs, ntfs и т.д., а потом возвратить результат, если есть запрещенные символы или нет.

Если вы хотите включить поддержку этой функции в FreePascal (наверно FileUtils unit), так создайте в багтрекере предложение о создании такой функции. Может кто-то реализует эту функцию или можете сразу прикрепить патч.
mig-31
постоялец
 
Сообщения: 175
Зарегистрирован: 14.07.2011 13:46:48

Re: Валидация имени файла или каталога

Сообщение shade » 14.06.2017 16:40:49

кстати да, в *nix всё сложнее, может статься так что в одном каталоге одни правила, в другом другие, например корень примонтирован на ext3 с одним набором ограничений, и путь /foo/bar будет иметь одни правила проверки, а в каталог /foo/bar/banana будет примонтирован ntfs со своими ограничениями, получается что часть пути (/foo/bar) должна проверяться по одним правилам, а другая часть (banana) должна проверяться по другим правилам. И не так просто проверить какую часть пути по каким правилам проверять. Самое простое я думаю надо хранить путь целиком как есть, а проверки уже делать по необходимости например через FileExists
Аватара пользователя
shade
энтузиаст
 
Сообщения: 881
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Re: Валидация имени файла или каталога

Сообщение olegy123 » 14.06.2017 22:01:24

mig-31 писал(а):Запрещенные символы в имени файла даны не платформой, а типом файловой системы.
Вначале надо определить тип файловой системы: ext4, reiserfs, brtfs, ntfs и т.д., а потом возвратить результат, если есть запрещенные символы или нет.

И кто вам даст в userspace определить файловую систему? А если это шара?
olegy123
энтузиаст
 
Сообщения: 718
Зарегистрирован: 25.02.2016 12:10:20

Re: Валидация имени файла или каталога

Сообщение Лекс Айрин » 15.06.2017 09:21:59

olegy123 писал(а):И кто вам даст в userspace определить файловую систему?


Вообще, можно поступить проще... даже двумя путями, при создании файла:
1) запрещенные символы известны и их можно тупо пропускать
2) можно использовать список разрешенных символов, правда, тогда многое можно использовать только поддиапазон всех разрешенных символов. (просто тупо нереально учесть их все)

Кстати, не стоит забывать и о серых символах, типа пробела, которые хотя и допускаются, но могут здорово осложнить жизнь. А тип системы, кстати, можно и не учитывать, т. к. даже если файл создан, то он потом может перемещаться в другое место и не обязательно при этом совпадают файловые системы.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4088
Зарегистрирован: 19.02.2013 16:54:51

Re: Валидация имени файла или каталога

Сообщение vitaly_l » 15.06.2017 09:29:42

zi000000 писал(а):для приведения строки к валидному (не содержащему запрещённых символов) виду?

Возьмите циркулярку и принудительно удалите, всё, что не буквы и не цифры. Остальные символы - по-боку, т.к. программа-то Ваша. Такое жёсткое решение - подойдёт сразу для всех систем.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3062
Зарегистрирован: 31.01.2012 16:41:41

Re: Валидация имени файла или каталога

Сообщение Лекс Айрин » 15.06.2017 09:48:04

vitaly_l, чел уже сказал, что проверку на допустимость он делает... просто хотел использовать вместо велосипеда стандартный метод.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4088
Зарегистрирован: 19.02.2013 16:54:51

Re: Валидация имени файла или каталога

Сообщение mig-31 » 15.06.2017 19:04:40

olegy123 писал(а):И кто вам даст в userspace определить файловую систему? А если это шара?


CentOS7

Код: Выделить всё
-bash-4.2$ df -T
Filesystem     Type     1K-blocks     Used Available Use% Mounted on
/dev/sda3      ext4      50264616 10077632  37610600  22% /
devtmpfs       devtmpfs   1905588        0   1905588   0% /dev
tmpfs          tmpfs      1920208       88   1920120   1% /dev/shm
tmpfs          tmpfs      1920208     9144   1911064   1% /run
tmpfs          tmpfs      1920208        0   1920208   0% /sys/fs/cgroup
tmpfs          tmpfs      1920208       16   1920192   1% /tmp
/dev/sda2      ext4     423199192 19410748 382268060   5% /home
tmpfs          tmpfs       384044       16    384028   1% /run/user/42
tmpfs          tmpfs       384044        0    384044   0% /run/user/1000
mig-31
постоялец
 
Сообщения: 175
Зарегистрирован: 14.07.2011 13:46:48

Re: Валидация имени файла или каталога

Сообщение olegy123 » 15.06.2017 22:05:56

А если это шара?
olegy123
энтузиаст
 
Сообщения: 718
Зарегистрирован: 25.02.2016 12:10:20

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 4

Рейтинг@Mail.ru