Как указать путь к файлу в c
Обновлено: 21.11.2024
В этой статье мы обсудим различные способы извлечения расширения из заданной строки пути с использованием различных методов, т. е.
- Библиотека файловой системы C++17
- Увеличить библиотеку файловой системы
- С++ STL
Предположим, что данный файл,
Это расширение должно быть .out.
Получить расширение заданного файла с помощью Boost Filesystem Library и C++17
И библиотека файловой системы boost, и файловая система C++17 предоставляют 2 функции-члена для класса пути в разных пространствах имен, например std::experimental::filesystem для C++17 и boost::filesystem для библиотеки файловой системы Boost.
путь path::extension() const;
Он возвращает объект пути, указывающий на компонент расширения данного объекта пути. Если файл не имеет расширения, он вернет пустой объект пути.
bool path::has_extension() const;
Возвращает true, если данный файл в объекте пути имеет расширение.
Используйте их, чтобы получить расширение данного файла.
Он вернет пустую строку, если данный файл не имеет расширения.
В случае c++17 используйте этот заголовочный файл и пространство имен,
В случае библиотеки Boost используйте этот заголовочный файл и пространство имен,
Полный пример повышения,
Чтобы скомпилировать приведенный выше пример с помощью Boost, используйте следующую команду
Чтобы скомпилировать приведенный выше пример с помощью C++17, используйте следующую команду:
Выбрать расширение заданного файла с помощью функций std::string
Шаги для поиска расширения в заданной строке пути,
- Поиск последнего вхождения символа «.».
- Если существует, вернуть подстроку от вхождения ‘.’ до последнего символа.
- Иначе вернуть пустую строку.
Полный пример выглядит следующим образом
Хотите лучше изучить современный C++?
Мы составили список лучших курсов C++, которые научат вас передовому современному C++ с самого начала до продвинутого уровня. Он также познакомит вас со словом Smart Pointers, семантикой перемещения, значением R, лямбда-функцией, авто, шаблоном Variadic, циклами на основе диапазона, многопоточностью и многими другими новейшими функциями C++, т.е. от C++11 до C++. 20.
Ознакомьтесь с подробными обзорами лучших современных курсов C++
Помните, что C++ требует большого терпения, настойчивости и практики. Итак, начните учиться сегодня.
Похожие сообщения
Проверить, является ли строка пустой в C++
C++: преобразование множества в вектор
Вектор C++: печать всех элементов — (6 способов)
C++11 / C++14: ключевое слово «удалить» и удаленные функции с вариантами использования | Примеры
C++: Как получить имя файла по пути с расширением или без него | Повышение | Библиотека файловой системы C++17
C++: получение списка всех файлов в заданном каталоге и его подкаталогах с помощью Boost и C++17
C++: проверьте, является ли указанный путь файлом или каталогом, используя библиотеку файловой системы Boost & C++17
C++11: как остановить или завершить поток
C++11: Как использовать std::thread в качестве переменной-члена в классе?
C++11: Как создать вектор объектов потока?
C++11: как получить идентификатор потока?
C++11: std::array Учебник и примеры
C++11 — std::all_of() — Учебник и пример алгоритма
C++: как проверить, заканчивается ли строка другой заданной строкой
C++11: примеры и руководство по std::any_of()
C++: проверка, начинается ли строка с другой заданной строки
C++11: учебник и пример make_tuple
C++11: std::tuple Учебник и примеры
Умный указатель C++11. Часть 6: unique_ptr<> Учебное пособие и примеры
Многопоточность C++11. Часть 10: packaged_task<> Пример и руководство
Оставить комментарий Отменить ответ
Этот сайт использует Akismet для уменьшения количества спама. Узнайте, как обрабатываются данные ваших комментариев.
Реклама
Реклама
Последние публикации
Что-то ищу
Учебники по C++/C++11
Условия использования
Условия и политика
Учебники по Python
Избранные сайты
Отказ от ответственности
Условия и политика
Авторское право © 2022 thisPointer
Техническое хранение или доступ строго необходимы для законной цели предоставления возможности использования конкретной услуги, явно запрошенной подписчиком или пользователем, или с единственной целью осуществления передачи сообщения по сети электронной связи.
Техническое хранение или доступ необходимы для законных целей хранения настроек, которые не запрашиваются подписчиком или пользователем.
Техническое хранилище или доступ, которые используются исключительно в статистических целях. Техническое хранилище или доступ, который используется исключительно для анонимных статистических целей.Без повестки в суд, добровольного согласия со стороны вашего интернет-провайдера или дополнительных записей от третьей стороны информация, хранящаяся или извлекаемая только для этой цели, обычно не может быть использована для вашей идентификации.
Техническое хранилище или доступ необходимы для создания профилей пользователей для отправки рекламы или отслеживания пользователя на веб-сайте или на нескольких веб-сайтах в аналогичных маркетинговых целях.
Техническое хранение или доступ строго необходимы для законной цели предоставления возможности использования конкретной услуги, явно запрошенной подписчиком или пользователем, или с единственной целью осуществления передачи сообщения по сети электронной связи.
Техническое хранение или доступ необходимы для законных целей хранения настроек, которые не запрашиваются подписчиком или пользователем.
Техническое хранилище или доступ, которые используются исключительно в статистических целях. Техническое хранилище или доступ, который используется исключительно для анонимных статистических целей. Без повестки в суд, добровольного согласия со стороны вашего интернет-провайдера или дополнительных записей от третьей стороны информация, хранящаяся или извлекаемая только для этой цели, обычно не может быть использована для вашей идентификации.
Техническое хранилище или доступ необходимы для создания профилей пользователей для отправки рекламы или отслеживания пользователя на веб-сайте или на нескольких веб-сайтах в аналогичных маркетинговых целях.
В этом руководстве рассказывается, как проверить, существует ли файл в C. Чтобы проверить, существует ли файл, попробуйте открыть файл в режиме чтения или записи. Эта программа открывает файл в режиме чтения.
Функция fopen() для проверки существования файла в C
Здесь имя файла demo.txt . Программа C и файл demo.txt находятся в одном каталоге. Таким образом, файл существует.
Если расположение программы C и расположение файла отличаются, мы должны указать полный путь к файлу.
Мы можем создать пользовательскую функцию и проверить, существует ли файл или нет. Ниже приведена программа с пользовательской функцией.
Программа напечатает, что файл существует, если файл demo.txt и программа C находятся в одном и том же месте. Если программа C и имя файла находятся в разных местах, мы должны указать полный путь к файлу.
Функция stat() для проверки существования файла в C
Мы читаем атрибуты файла с помощью функции stat() вместо чтения данных из файла. Эта функция вернет 0, если операция выполнена успешно; в противном случае он вернет -1 , если файл не существует.
Программа напечатает, что файл существует, если файл demo.txt и программа C находятся в одном и том же месте. Если программа C и имя файла находятся в разных местах, мы должны указать полный путь к файлу.
Функция access() для проверки существования файла в C
Еще один способ проверить, существует ли файл, — использовать функцию access(). Заголовочный файл unistd.h имеет доступ к функции для проверки существования файла.
Мы можем использовать R_OK для разрешения на чтение, W_OK для разрешения на запись и X_OK для разрешения на выполнение. Мы можем использовать их вместе как R_OK|W_OK для разрешения на чтение и запись.
Здесь C:\TEMPdemo.txt — это расположение файла. Если файл существует, он печатает файл найден; в противном случае он печатает файл не найден. Расположение программы и файла demo.txt совпадает. В противном случае мы должны указать местоположение файла. Комбинация функций stat() и access() — хороший выбор для операционной системы Linux.
Другой способ использования функции access() показан ниже:
Статьи DelftStack написаны такими же фанатами программного обеспечения, как и вы. Если вы также хотите внести свой вклад в DelftStack, написав платные статьи, вы можете посетить страницу «Написать для нас».
Статья по теме — файл C
сообщить об этом объявлении
Привет, я делаю простую программу, которая может загружать модели и текстуры. У меня есть модели по умолчанию, которые можно загружать, а затем у меня есть модели и текстуры, которые может загружать пользователь. Всякий раз, когда пользователь загружает новую модель или текстуру, он переключает путь к файлу, что означает, что модели по умолчанию не могут быть загружены.
Прежде чем пользователь загрузит модель и текстуру, путь к файлу по умолчанию будет просто media/file
.Затем, когда пользователь загружает файл, каталог файла становится тем, что выбирает пользователь.
Единственный способ обойти это — жестко указать все пути к файлам вместо media/file, он становится C:/Folder/Folder/media/file
Это работает нормально, но если я отправлю программное обеспечение, файлы не смогут открываться на других компьютерах.
Какое решение этой проблемы и как разработчики избегают этой проблемы?
KielanT сказал:
Прежде чем пользователь загрузит модель и текстуру, путь к файлу по умолчанию будет просто media/file. Затем, когда пользователь загружает файл, каталог файла становится тем, что он выбирает. .
Я не совсем уверен, что понимаю, что вы имеете в виду. Вы говорите о «рабочем каталоге»/«текущем каталоге», пути, из которого ваше приложение разрешает все относительные пути к файлам? И если да, то вы говорите об изменении этого пути после того, как пользователь открывает файл-диалог? В этом случае у вас есть несколько вариантов отменить это:
- Вы не сообщили подробностей о том, как выполняется загрузка файлов, однако я предполагаю, что вы открываете какой-то файл-диалог. В Windows у вас есть возможность передать «OFN_NOCHANGEDIR» в качестве флагов, что приведет к тому, что рабочий каталог не будет изменен
- Точно так же ваша ОС должна иметь API-функции для непосредственного управления этими путями. В Windows у вас есть GetCurrentDirectory и SetCurrentDirectory, которые вы можете использовать для сохранения и изменения пути по своему вкусу, например, сохраняя GetCurrentDirectory, а затем SetCurrentDirectory после того, как какая-либо операция изменит его, чтобы вернуть его к значению по умолчанию.
Еще одна вещь, которую делают приложения, это предполагает, что некоторые пути вообще не относятся к текущему каталогу, а относятся к определенному базовому каталогу. Поскольку вы упомянули активы/медиафайлы, скажем, в моем случае папка базовых активов называется «Активы». Все активы-файлы адресуются относительно этой папки, т.е. «Assets/Textures/Texture.jpg». Затем я сохраняю абсолютный путь к этой папке во время загрузки, а затем всякий раз, когда запрашивается актив, я либо создаю абсолютный путь, либо временно меняю «текущий каталог» с помощью упомянутый выше API, чтобы разрешить эти пути.
Имейте несколько путей, по которым вы ищете вещи. например, иметь путь к каталогу, принадлежащий игре, для материалов, предоставляемых игрой (т. е. вами), и путь, принадлежащий пользователю, для материалов, предоставляемых пользователями.
Когда вы что-то ищете, вы сначала ищете путь, принадлежащий игре, а если не находите, вы ищете путь, указанный пользователем.
При такой настройке пользователь не может переопределить добавленную игрой вещь. Если это желательно, то пользовательский материал имеет более высокий приоритет (т. е. смотрите туда в первую очередь).
что-то подобное можно сделать в Rad Studio (ищите наличие этого класса функций в других компиляторах)
- Строка appPath; //создаем в программе эту строковую переменную для хранения пути
- appPath = ExtractFilePath(Application->ExeName); //теперь appPath содержит путь к EXE
- когда вы собираетесь загрузить файл на жесткий диск, ваши папки данных EXE делаются следующим образом:
- const String Pathh = appPath + "folder_models\\" + имя файла; // имя файла может быть String filename = «file.doc»;
- затем используйте Pathh для загрузки локального файла
Поступая таким образом…..всегда вы получаете правильный путь к EXE-приложению, и, как предполагается, папки с данными ваших «собственных» файлов, моделей, данных и т. д. зависают от этого пути внутри вашего EXE-приложения, тогда хорошо….. всегда работают без необходимости жестко задавать встроенные пути вручную.
Ниже представлен модуль с функциями, которые демонстрируют, как анализировать путь к файлу, имя файла и расширение файла из пути с помощью C++.
<р>1. Получить путь к файлуПример ниже демонстрирует использование ‘Utils::getFilePath’ для синтаксического анализа и получения пути к файлу из пути.
<р>2. Получить имя файлаПример ниже демонстрирует использование ‘Utils::getFileName‘ для синтаксического анализа и получения имени файла из пути.
<р>3. Получить расширение имени файлаПример ниже демонстрирует использование Utils::getFileExtension для синтаксического анализа и получения расширения файла из пути.
<р>4. Пространство имен UtilsНиже показано пространство имен Utils. Включите это в свой проект, чтобы начать использовать!
auto fileName = fileNameStart == std :: string :: npos ? путь: путь. substr (fileNameStart + 1);
<р>5. Другие примерыНиже приведены дополнительные примеры, демонстрирующие использование пространства имен «Utils». Не забудьте включить модуль при запуске примеров!
КРАТКИЕ ПРИМЕЧАНИЯ.
Выделенные строки представляют собой разделы, на которые стоит обратить внимание.
Код сильно прокомментирован, поэтому дополнительные сведения не требуются. Если у вас есть какие-либо вопросы, не стесняйтесь оставлять комментарии ниже.
Связанные
Оставить ответ Отменить ответ
Поиск
Перевести страницу
Скомпилируйте свой код сейчас
Календарь
S | M | T | W | T | П | В |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6< /td> | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23< /td> | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Популярные страницы
Привет, я инженер-программист. В свободное время я пишу статьи о программировании и дизайне.
Если я помог вам, посетите одного из наших рекламодателей или угостите меня кофе. Спасибо за поддержку!
Читайте также: