Программа 29. Копирование файлов
В приводимой далее программе открываются два файловых потока: один на чтение, другой на запись. Из входного файла производится построчное чтение, прочитанные строки выводятся на экран и в выходной файл. После чтения каждых 20 строк программа останавливается и ждет нажатия клавиши Enter.
// Файл CopyFile.cpp
// Файловый ввод и вывод
#include <fstream.h>
#include <conio.h>
#include <stdlib.h> // Для exit
const int PAGE = 20; // Максимальное число строк на странице
const int MAXLEN = 200; // Максимальная длина строки
const int LenName = 13; // Длина строки с именем файла
void main()
{
ifstream fin; // Файловый поток для ввода
ofstream fout; // Файловый поток для вывода
char filename[LenName]; // Массив для имени файла
char line[MAXLEN]; // Массив для строк
cout << "\nВведите имя входного файла ";
cin >> filename;
fin.open(filename);
if(!fin){ // Если не удалось открыть входной файл
cerr << "Не удалось открыть файл " << filename;
exit(1);
}
cout << "\nВведите имя выходного файла ";
cin >> filename;
fout.open(filename);
if(!fout){ // Если не удалось открыть выходной файл
cerr << "Не удалось открыть файл " << filename;
exit(1);
}
int i = 0; // Количество прочитанных строк
cin.get(); // Убираем код из cin
while(!fin.eof()){ // Пока не достигнут конец файла
fin.getline(line, MAXLEN); // Чтение строки из файла
i++; // Увеличение счетчика
cout << line << '\n'; // Вывод строки на экран
fout << line << '\n'; // Вывод строки в файл
if(i % PAGE == 0) // Если выведена очередная страница,
cin.get(); // ждем нажатия клавиши Enter
}
fin.close(); // Закрытие входного файла
fout.close(); // Закрытие выходного файла
getch();
}
Программа запрашивает имя входного файла и пытается открыть его на чтение. При открытии файла возможна неудача, например из-за неправильно указанного имени, в этом случае программа завершается вызовом exit.
Если входной файл удалось открыть, запрашивается имя выходного файла и он открывается на запись. Здесь тоже возможна неудача, например, потому, что файл с указанным именем существует и открыт другой программой. В этом случае также вызывается функция exit, которая корректно завершит программу, закрыв ранее открытый входной файл.
Предварительный вызов cin.get() перед циклом while нужен по следующей причине. При выполнении инструкции:
cin >> filename;
оператор >> пропускает начальные пробелы, затем читает символы имени файла и заносит их в массив filename. Чтение набранных на клавиатуре символов заканчивается при поступлении любого пробельного символа, в том числе символа “новая строка”, который остается в буфере клавиатуры. Именно этот символ и извлекается из буфера с помощью cin.get(). Если этого не сделать перед циклом, то новая строка будет прочитана внутри цикла, в результате на экран будут выведены две порции из PAGE строк, а не одна.
Командная строка
Командная строка позволяет взаимодействовать с операционной системой путем ввода различных команд. В операционной системе DOS командная строка была основным способом управления компьютером, что было неудобно тем, что приходилось запоминать названия большого числа команд и их параметры. В операционной системе Windows командная строка скрыта за графическим интерфейсом, который спроектирован так, чтобы быть интуитивно понятным и не требовать от пользователя знания команд операционной системы. Однако командная строка не исчезла совсем. Она связана с любым ярлыком на Рабочем столе Windows и запускает программу, связанную с этим ярлыком. Ее можно увидеть, посмотрев свойства ярлыка.
В Windows оставлена возможность непосредственно запускать программы с помощью командной строки в окне, моделирующем работу DOS, которое открывается командой Пуск, Программы, Стандартные, Командная строка. Для однократного выполнения какой либо команды можно командой Пуск, Выполнить открыть окно Запуск программы, рис.24, где ввести командную строку или вручную, или выбрав нужную программу с помощью кнопки Обзор. На рис.24 показана командная строка для запуска программы 13, расположенной в файле Receipts.exe.
Рис.24. Запуск программы с помощью командной строки
При работе в TC программы можно запускать непосредственно из интегрированной среды командой меню Run, Run или комбинацией клавиш Ctrl+F9, но иногда нужно опробовать запуск программы из командной строки. Для этого в TC предусмотрен выход в среду операционной системы с помощью команды File, DOS shell. После выполнения данной команды будет предъявлен текстовый экран, внизу которого расположена командная строка с курсором, рис.25. Здесь можно вводить команды и запускать их на выполнение нажатием Enter.
Рис.25. Экран Dos shell в TC
Команда dir выводит на экран полное содержимое текущего каталога. Чтобы показать нужную группу файлов, в команде dir следует указать маску файлов, например, команда
...> dir *.exe
выведет имена исполняемых файлов. Звездочка в командах заменяет произвольный набор символов в именах файлов. Результат выполнения этой команды виден на рис. 25.
Любую из созданных программ можно выполнить, набрав ее имя в командной строке, например, команда
…>AllocMem.exe
запустит на выполнение программу AllocMem.exe. Заметим, что DOS считает большие и малые буквы одинаковыми.
Для возврата из режима командной строки в среду TC нужно выполнить команду exit.