lab10_2 (1080927), страница 3
Текст из файла (страница 3)
Подобные перечисленным функции класса ostream:
long tellp()
определяет текущую позицию записи в поток:
ostream& seekp (long pos, seek_dir dir)
аналогична функции seekg () , но принадлежит классу ostream
и выполняет относительное перемещение позиции записи
в поток;
ostream& seekp(long pos);
устанавливает абсолютную позицию записи в поток.
Использование аргументов командной строки
Данные в функцию main() можно передавать через параметры из командной строки (строки запуска функции на выполнение из операционной системы). Это удобно при отладке программы (чтобы не вводить при каждом запуске одни и те же данные) и может быть удобным при использовании программы.
При использовании функции main() с параметрами в командной строке заголовок функции имеет вид:
int main(int argc, char* argv[]), где:
argc – количество параметров;
argv[] – массив указателей на параметры (каждый параметр – строка).
Первый параметр, argv[0] – указатель на полное имя исполняемого файла. Он передается по умолчанию и не указывается при запуске программы.
Для выполнения программы с аргументами в командной строке нужно уметь:
- запустить программу с параметрами в командной строке;
- проконтролировать из программы количество параметров;
- использовать параметры из командной строки в тексте программы.
Запуск программы с параметрами в командной строке можно осуществить непосредственно из командной строки ДОС или из среды программирования Microsoft Visual C++.
Для запуска из командной строки ДОС нужно выполнить следующие действия:
- на Рабочем столе Windows нажать кнопку ПУСК;
- в раскрывшемся меню выбрать пункт ВЫПОЛНИТЬ;
- с помощью кнопки ОБЗОР… найти нужный файл с расширением .exe;
- в окне Открыть: после символа “, стоящего в конце полного имени файла, через пробел ввести необходимые параметры.
Для запуска из Microsoft Visual C++ нужно:
- открыть меню Project;
- выбрать пункт Settings…;
- в окне Program settings выбрать закладку Debug;
- в поле Program arguments через пробел ввести необходимые параметры.
При контроле числа параметров нужно иметь ввиду, что первый параметр всегда передается по умолчанию и число параметров будет на 1 больше, чем введено. Например, если передается один параметр - имя файла с исходными данными, то argc будет равно 2, argv[0] указывает на полное имя исполняемого модуля (точнее, на список параметров системного окружения, первым из которых является имя исполняемого файла), а argv[1] указывает на введенное имя файла с данными.
При использовании параметров нужно помнить, что каждый передаваемый параметр – это символьная строка. Если надо передать численное значение, то в программе надо преобразовать строку в число с помощью соответствующей типу числа функции (doubl atof(char *str), int atoi(char *str), или long atol(char *str)).
В качестве примера работы с файловыми потоками приведем программу копирования одного файла в другой. Имена файлов берутся из аргументов командной строки:
// МуСору.срр
#include <iostream>
#include <fstream>
#include "PrintCyr.h"
using namespace std;
int main(int argc, char* argv[])
{
if (argc != 3) cout <<"Неверное число аргументов"<<endl;
ifstream from(argv[1]); // открываем входной файл
if (!from)
{
cout<<"Входной файл "<< argv[1 ]<<" не найден"<<endl;
return 1;
}
ofstream to(argv[2]); // открываем выходной файл
if (!to)
{
cout<<"Выходной файл "<< argv[2]<< " не открыт"<< endl;
return1;
}
char ch;
while (from.get(ch))
{
to.put(ch);
if (!to) cout<<"Ошибка записи (диск переполнен).";
}
cout << "Копирование из " << argv[1] << " в " << argv[2] << " завершено." << endl;
return 0;
}