Д. Стефенс - C++. Сборник рецептов

Здесь есть возможность читать онлайн «Д. Стефенс - C++. Сборник рецептов» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2007, ISBN: 2007, Издательство: КУДИЦ-ПРЕСС, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

C++. Сборник рецептов: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «C++. Сборник рецептов»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Данная книга написана экспертами по C++ и содержит готовые рецепты решения каждодневных задач для программистов на С++. Один из авторов является создателем библиотеки Boost Iostreams и нескольких других библиотек C++ с открытым исходным кодом. В книге затрагивается множество тем, вот лишь некоторые из них: работа с датой и временем; потоковый ввод/вывод; обработка исключений; работа с классами и объектами; сборка приложений; синтаксический анализ XML-документов; программирование математических задач. Читатель сможет использовать готовые решения, а сэкономленное время и усилия направить на решение конкретных задач.

C++. Сборник рецептов — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «C++. Сборник рецептов», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать
Решение

Рассматривайте пути как строки и используйте оператор добавления в конец строки, operator+=, для составления полного пути из составных частей. См. пример 10.26.

Пример 10.26. Объединение путей

#include

#include

using std::string;

string pathAppend(const string& p1, const string& p2) {

char sep = '/';

string tmp = p1;

#ifdef _WIN32

sep = '\\';

#endif

if (p1[p1.length()] != sep) { // Необходимо добавить

tmp += sep; // разделитель

return(tmp + p2);

} else

return(p1 + p2);

}

int main(int argc, char** argv) {

string path = argv[1];

std::cout << "Appending somedir\\anotherdir is \""

<< pathAppend(path, "somedir\\anotherdir") << "\"\n";

}

Обсуждение

В программе примера 10.26 для представления путей используются строки, но здесь не делается дополнительной проверки достоверности путей и переносимость их полностью зависит от содержащихся в них значений. Например, если эти значения получены от пользователя, то вы не можете заранее знать, имеют ли они правильный формат конкретной ОС или содержат недопустимые символы.

Для многих других рецептов данной главы я включил примеры по использованию библиотеки Boost Filesystem, и при работе с путями такой подход имеет много преимуществ. Как я говорил при обсуждении рецепта 10.7, библиотека Boost Filesystem содержит класс path, обеспечивающий переносимое представление пути к файлу или каталогу. Операции в библиотеке Filesystem в основном оперируют объектами path, и поэтому с помощью класса pathможно реализовать объединение относительного пути с абсолютной его базовой частью. (См. пример 10.27.)

Пример 10.27. Объединение путей средствами Boost

#include

#include

#include

#include

#include

using namespace std;

using namespace boost::filesystem;

int main(int argc, char** argv) {

// Проверка параметров...

try {

// Составить путь из значений двух аргументов path

p1 = complete(path(argv[2], native),

path(argv[1], native));

cout << p1.string() << endl;

// Создать путь с базовой частью пути текущего каталога path

p2 = system_complete(path(argv[2], native));

cout << p2.string() << endl;

} catch (exception& e) {

cerr << e.what() << endl;

}

return(EXIT_SUCCESS);

}

Результат выполнения программы примера 10.27 может иметь такой вид.

D:\src\ccb\c10>bin\MakePathBoost.exe d:\temp some\other\dir

d:/temp/some/other/dir

D:/src/ccb/c10/some/other/dir

Или такой.

D:\src\ccb\c10>bin\MakePathBoost.exe d:\temp с:\WINDOWS\system32

c:/WINDOWS/system32

c:/WINDOWS/system32

Из этого примера видно, что функции completeи system_completeобъединяют пути, когда это возможно, и возвращают абсолютный путь, когда объединение путей не имеет смысла. Например, в первом случае первый переданный программе аргумент является абсолютным путем каталога, а второй — относительным путем. Функция completeобъединяет их и формирует один, абсолютный путь. Первый аргумент completeявляется относительным путем, а второй — абсолютным путем, и если первый аргумент уже является абсолютным путем, второй аргумент игнорируется. Поэтому во втором случае аргумент « d:\temp» игнорируется, так как переданный мною второй аргумент уже является абсолютным путем.

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

Однако эти пути не согласуются с требованиями файловой системы. Вам придется самому проверить объекты path, чтобы убедиться, что они представляют правильный путь файловой системы. Например, для проверки существования этих путей вы можете использовать функцию exists.

path p1 = complete(path(argv[2], native),

path(argv[1], native));

if (exists(p1)) {

// ...

Существует много других функций, позволяющих получать информацию о пути: is_directory, is_empty, file_size, last_write_timeи т.д. Дополнительную информацию вы найдете в документации по библиотеке Boost Filesystem на сайте www.boost.org .

Смотри также

Рецепт 10.7.

Глава 11

Наука и математика

11.0. Введение

Язык программирования C++ хорошо подходит для решения научных и математических задач из-за своей гибкости, выразительности и эффективности. Одно из самых больших преимуществ применения C++ для выполнения численных расчетов связано с тем, что он помогает избегать избыточности.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «C++. Сборник рецептов»

Представляем Вашему вниманию похожие книги на «C++. Сборник рецептов» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «C++. Сборник рецептов»

Обсуждение, отзывы о книге «C++. Сборник рецептов» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.