Проверьте правильность имени файла в Windows - PullRequest
6 голосов
/ 21 июня 2010

Я хочу проверить, является ли моя строка допустимым путем к файлу Windows. Я искал вокруг, и кажется, что нет надежного способа сделать это. Также я проверил библиотеку надстройки над файловой системой, и для этой проверки не существует очевидной функции, может быть что-то вроде is_valid_windows_name

Ответы [ 4 ]

1 голос
/ 21 июня 2010

Я не верю, что для этого есть стандартный API c ++.

Обратите внимание, что Windows API допускает больше имен файлов, чем оболочка Windows (имена файлов, которые пользователь может использовать в проводнике windws).

Вы должны взглянуть на API оболочки Windows.

Другая возможность - использовать метод проб и ошибок, так что вы действительно независимы от текущей файловой системы.

Самый простой способ - запретить

\ / <> | ":? *

и с тобой все будет в порядке.

1 голос
/ 23 января 2015

Да, есть функция повышения, которая делает то, что вы хотите. Посмотрите на boost :: filesystem :: windows_name (...). Вам нужно будет включить boost / filesystem / path.hpp, а также ссылку на правильные (зависящие от версии и архитектуры) библиотеки libboost_system и libboost_filesystem, поскольку путь не является lib только для заголовков.

1 голос
/ 21 июня 2010

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

См. MSDN для получения дополнительной информации.

Обратите внимание, что эта функция зависит от Windows.

0 голосов
/ 07 мая 2016

Жаль, что даже новейшая библиотека файловой системы C ++ 17 не имеет функции для проверки имен файлов.

Вы можете использовать специфичную для Windows Shell Lightweight Utility функцию PathFileExists или Windows API GetFileAttributes и проверить код последней ошибки специально для ERROR_INVALID_NAME.

Я думаю, что это неправильное использование (потому что для него действительно должна быть выделенная функция), но оно служит цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...