В C ++, как я могу проверить путь к файлу или папке? - PullRequest
3 голосов
/ 05 января 2010

Пользовательская строка ввода для пути назначения может содержать пробелы или другие недопустимые символы.

Пример: "C: \ users \ username \ \ directoryname \"

Обратите внимание, что по обеим сторонам пути имеются пробелы, а также недопустимое имя папки, содержащее только пробел в середине. Проверка, чтобы видеть, является ли это абсолютный путь, недостаточна, потому что это действительно только обрабатывает начальные пробелы. Удаление конечных пробелов также недостаточно, поскольку в середине все еще остается недопустимое пространство для имени папки.

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

Ответы [ 4 ]

6 голосов
/ 05 января 2010

Единственный способ «доказать», что путь действителен, - открыть его.

SHLWAPI предоставляет набор функций пути, которые можно использовать для канонизации пути или проверки того, что путь кажется допустимым. Это может быть полезно для отклонения явно неверных путей, но вы все еще не можете поверить, что путь действителен, не проходя через файловую систему.

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

2 голосов
/ 05 января 2010

Библиотека Boost Filesystem предоставляет помощников для манипулирования файлами, путями и т. Д. Посмотрите на простой пример ls и функция .

1 голос
/ 05 января 2010

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

0 голосов
/ 06 января 2010

Если вы не хотите открывать файл, вы также можете использовать что-то вроде access() на POSIX-подобных платформах или _access() и друзей в Windows. Тем не менее, мне нравится метод Boost.Filesystem Ricardo указал.

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