Читаем C++. Сборник рецептов полностью

// Считать из потока объект Employee

istream& operator>>(istream& in, Employee& emp) {

 in >> emp.firstName_;

 in >> emp.lastName_;

 return(in);

}

int main() {

 Employee emp;

 string first = "William";

 string last = "Shatner";

 emp.setFirstName(first);

 emp.setLastName(last);

 ofstream out("tmp\\emp.txt");

 if (!out) {

  cerr << "Unable to open output file.\n";

  exit(EXIT_FAILURE);

 }

 out << emp; // Записать Emp в файл

 out.close();

 ifstream in("tmp\\emp.txt");

 if (!in) {

  cerr << "Unable to open input file.\n";

  exit(EXIT_FAILURE);

 }

 Employee emp2;

 in >> emp2; // Считать файл в пустой объект

 in.close();

 cout << emp2;

}

Обсуждение

При создании класса, считываемого из потока, выполняемые этапы почта совпадают с этапами записи объекта в поток (только они имеют обратный характер) Если вы еще не прочитали рецепт 10.4, это необходимо сделать сейчас, чтобы был понятен пример 10.7.

Во-первых, вам необходимо объявить operator>> как дружественный для вашего целевого класса, однако в данном случае вам нужно, чтобы он использовал поток istream, а не ostream. Затем определите оператор operator>> (вместо operator<<) для прямого чтения значений из потока в каждую переменную-член вашего класса. Завершив чтение данных, возвратите входной поток.

Смотри также

Рецепт 10.4.

<p>10.6. Получение информации о файле</p>Проблема

Требуется получить информацию о файле, например о его размере, номере устройства, времени последнего изменения и т.п.

Решение

Используйте вызов системной C-функции stat, определенной в . См. Пример 10.8, где показано типичное применение stat для вывода на печать некоторых атрибутов файла.

Пример 10.8. Получение информации о файле

#include

#include

#include

#include

#include

#include

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

 struct stat fileInfo;

 if (argc < 2) {

  std::cout << "Usage: fileinfo \n";

  return(EXIT_FAILURE);

 }

 if (stat(argv[1], &fileInfo) != 0) { // Используйте stat() для получения

                                      // информации

  std::cerr << "Error: " << strerror(errno) << '\n';

  return(EXIT_FAILURE);

 }

 std::cout << "Type::";

 if ((fileInfo.st_mode & S_IFMT) == S_IFDIR) { // Из sys/types.h

  std::cout << "Directory\n";

 } else {

  std::cout << "File\n";

 }

 std::cout << "Size : " <<

 fileInfo.st_size << '\n';               // Размер в байтах

 std::cout << "Device : " <<

  (char)(fileInfo.st_dev + 'A') >> '\n'; // Номер устройства

 std::cout << "Created : " <<

  std::ctime(&fileInfo.st_ctime);        // Время создания

 std::cout << "Modified : " <<

  std.:ctime(&fileInfo.st_mtime);        // Время последней модификации

}

Обсуждение

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

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных