МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра экономической информатики
Расчетно-графическая работа по курсу
«Операционные системы»
Вариант №4
Факультет Бизнеса
Группа: ФБИ-
Выполнил
Проверил Сваровский С.Г.
Новосибирск
2007
По варианту задания требуется написать программу, которая выполняется наподобие команды COPY из MsDOS, в оригинале программа производит копирование файлов.
На рисунке 1 представлена блок-схема работы программы:
Рисунок 1. Блок-схема работы программы.
Текст программы:
program copy2; //название программы в процессах
{$APPTYPE CONSOLE} //директива компилятору что это
//консольное приложение и ей требуется окно
uses
SysUtils,classes,CRC; //Подключаемые библиотеки, CRC не
//стандартная, взята из Интернета
var str:string; //str - буферная переменная используется при вопросе о перезаписи
Y,V:boolean; //флаги о встрече ключей /Y и /N
CRC1,CRC2:longint; //переменные, где промежуточно хранятся расчётные CRC
function RCopyFile(InFile,OutFile: String): boolean; //функция копирования
var
InFS,OutFS: TFileStream; //файловые потоки
begin
InFS := TFileStream.Create( InFile, fmOpenRead ); //инициализация потоков
OutFS := TFileStream.Create( OutFile, fmCreate );
InFS.Seek( 0, soFromBeginning ); //маркер начала
if OutFS.CopyFrom( InFS, 0 )=0 then Result:=true else Result:=false; //копирование
InFS.Free; //закрытие потоков
OutFS.Free;
end;
begin
if paramstr(1)='/?' then //если встретился ключ /? Тогда
begin //выводим справку
Writeln('Программа копирует указанный файл в указанный');
Writeln('Синтаксис: copy2 файл1 файл 2 [/Y] [/V]');
Writeln('ключ /Y подавляет запросы о замене');
Writeln('при ключе /V проводится проверка правильности копирования');
end else
if paramcount<2 then //если ключей меньше двух
begin //выводим ошибку
Write('ошибка в синтаксисе');
end else
begin
if (Paramstr(3)='/Y')or(Paramstr(4)='/Y') then y:=true else y:=false; //проверяем наличие ключей на позициях
if (Paramstr(3)='/V')or(Paramstr(4)='/V') then v:=true else v:=false; // 3 и 4 если есть помечаем в соответствующем флаге
if not fileexists(ParamStr(1)) then //если первый файл недоступен
begin
WriteLn('Файл '+ParamStr(1)+' не найден или недоступен'); //выводим ошибку
exit; //и завершаем выполнение
end;
if fileexists(ParamStr(2))and(not Y) then //проверка на существование второго файла
begin //если он есть и помечен ключ Y то
WriteLn('заменить текущий файл '+ParamStr(2)+' ?[Y/N]'); //выводим вопрос о замене
repeat //и в цикле
Readln(str); //введённое пользователем
if str='N' then halt; //если N завершаем программу
until str='Y'; //цикл пока ключ не будет равен Y
end;
if not Rcopyfile(PChar(ParamStr(1)),PChar(ParamStr(2))) then //пробуем произвести копирование
begin
WriteLn('Произошла ошибка при копировании'); //если не получилось выводим ошибку
end;
if V then //если флаг N помечен
begin
Write('Рассчёт CRC для файла '+ParamStr(1)+'... '); //выводим сообщение о действиях
if FileCRC32(ParamStr(1),CRC1) then WriteLn('OK') else //пробуем считать CRC если получилось пишем OK
begin
WriteLn('Ошибка при проверке, нет доступа к файлу '+ParamStr(1)); //иначе пишем ошибку
exit; //и завершаем выполнение
end;
Write('Рассчёт CRC для файла '+ParamStr(2)+'... '); //выводим сообщение о действиях
if FileCRC32(ParamStr(2),CRC2) then WriteLn('OK') else //пробуем считать CRC если получилось пишем OK
begin
WriteLn('Ошибка при проверке, нет доступа к файлу '+ParamStr(2)); //иначе пишем ошибку
exit; //и завершаем выполнение
end;
if CRC1=CRC2 then WriteLn('CRC равны, копирование прошло успешно') //если CRC равны сообщаем что всё прошло успешно
else WriteLn('CRC не равны, копирование прошло неудачно') //иначе выводим сообщение об ошибке
end;
end;
end.
Примеры работы программы:
1) Неверный ввод параметров
C:\Documents and Settings\User\Мои документы\Borland Studio Projects\copy2>copy2
ошибка в синтаксисе'
2) Вывод помощи
C:\Documents and Settings\User\Мои документы\Borland Studio Projects\copy2>copy2 /?
Программа копирут указанный файл в указанный
Синтаксис: copy2 файл1 файл 2 [/Y] [/V]
ключ /Y подавляет запросы о замене
при ключе /V проводится проверка правильности копирования
3) Замена файла с последующей проверкой правильности копирования
C:\Documents and Settings\User\Мои документы\Borland Studio Projects\copy>copy2 qwe ewq /V
заменить текущий файл ewq ?[Y/N]Y
Рассчёт CRC для файла qwe... OK
Рассчёт CRC для файла ewq... OK
CRC равны, копирование прошло успешно
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.