аблица 1. Библиотеки C++.3. Заключение В данной курсовой работе были рассмотрены команды MS DOS, позволяющие копировать, удалять, переименовывать файлы. А также функции и системные вызовы языка С++, позволяющие организовывать копирование, удаление файлов и т.д. Данная работа позволила мне более углубленно изучить работу с строковыми функциями, различные тонкости языка и увидеть недостатки С++. В курсовой работе была создана и описана программа, позволяющая работать с файлами в среде MS DOS. Данная программа может быть использована студентами для изучения работы с файлами в среде MS DOS и частично с UNIX, на лабораторных занятиях по изучению теоретического материала и приобретения практических навыков по дисциплине «Системное Программное Обеспечение». 4. СПИСОК ЛИТЕРАТУРЫГерхард Франкен, Сергей Молявко MS DOS для пользователя.- Киев, 1993.С. Краковяк Основы организации и функционирования ОС ЭВМ.- М.: Мир, 1998.С. Кейслер Проектирование операционных систем для малых ЭВМ. - М.: Мир, 1996.Э. Немет, Г. Снайдер Unix. Руководство системного администратора. - Киев.: BHV, 1997.Дегтярев Е.К. Введение в Unix.- М.: Память, 1992.Свиридов С.В. Системные вызовы ОС UNIX.-М.:Память, 1992.Дунаев С. UNIX-сервер. Настройка, конфигурирование, работа в операционной среде, Internet-возможности: в 2-х томах.Том 1.-М.:Диалог -МИФИ, 1999.Дунаев С. UNIX-сервер. Настройка, конфигурирование, работа в операционной среде, Internet-возможности: в 2-х томах.Том 2.-М.:Диалог -МИФИ, 1999.Шамер Л., Негус К. UNIX (серия «Без проблем»):Пер. с англ. -М.:Бином, 1998.Кейлингерт П. Элементы операционных систем. Введение для пользователей. Пер. с англ.-М.:Мир,1995.Персон Р. Windows 95 в подлиннике. Пер. с англ.-СПБ:BHV-Санкт -Петербург, 1996.5. Приложение#include <iostream.h> #include <stdio.h> #include <conio.h> #include <math.h> #include <string.h> #include <ctype.h> #include <stdlib.h> #include <dir.h> //Процедура для копирования файла //FILCOP---------------------------------------------------------------------- int FILCOP(char *sd,char *sf) { FILE *in, *out; in = fopen(sd, "r"); открывает фаил и копирует в буфер содержимое out = fopen(sf, "w"); открывает или создаёт фаил while (!feof(in)) fputc(getc(in), out); заполняет новый фаил fclose(in); fclose(out); закрывает фаил return(0); возрашет функции значение 0 } Функция для создания полного пути //ANY---------------------------------------------------------------------- char *GAD(char *sm, char *namf) { char *zzx,kr[254],*newfil; kr[0]='\0'; устанавливаем переменые zzx=strpbrk(sm,"\\"); ишет "\" if (zzx) { если есть strcpy(kr,sm); копирует в kr путь без имени файла strrev(kr); реверс строки newfil = strstr(kr, "\\"); отрезает до "\" strrev(newfil); реверс строки strcat(newfil,namf); добовляет имя файла в путь strlwr(newfil); уменьшает символы return newfil; } else return namf; } Функция для вырезки только путя //ANY55---------------------------------------------------------------------- char *GIP(char *sm) { char *zzx,kr[254],*newfil; kr[0]='\0'; устанавливаем переменые zzx=strpbrk(sm,"\\"); ишет "\" if (zzx) { если есть strcpy(kr,sm); копирует в kr путь без имени файла strrev(kr); реверс строки newfil = strstr(kr, "\\"); отрезает до "\" strrev(newfil);реверс строки strlwr(newfil);уменьшает символы return newfil; } else return sm; } Удаление фаил (а,ов) //DELFILE---------------------------------------------------------------------- DELFILE(char *sm) { //char *newfil, kr[254]; устанавливаем переменые struct ffblk ffblk; Структура о файле int done; done = findfirst(sm,&ffblk,0); ишет файлы if (done==-1) cout<<"\nError"; если путь неправельный- ошибка while (!done) ишет пока не кончатся файлы { if (remove(GAD(sm,ffblk.ff_name)) == 0) удаление файла cout<<"\n Delete 1 files"; вывод на экран текста else cout<<"\n File do not delete "; вывод на экран текста done = findnext(&ffblk); следующий файл } return (0); } Переименование фаила //RENAME---------------------------------------------------------------------- RENFILE(char *sm,char *nm) { strcpy(kr,sm); копирует в kr путь без имени файла strrev(kr); реверс строки newfil = strstr(kr, "\\"); отрезает до "\" strrev(newfil);реверс строки strlwr(newfil);уменьшает символы if (rename(sm, nm) == 0) Фу Переименование фаила cout<<"File renamed"; вывод на экран текста else cout<<"File do not renamed"; вывод на экран текста return (0); } //COPY---------------------------------------------------------------------- COPYES(char *sm) { char *nnj,zt[254],zt2[254]; int ji=0,jiz=0; установка перемен //ON>>>>TWO************************************************ char ff[254],fs[254],*ptr7,ffg[254],fss[254]; fs[0]='\0'; fss[0]='\0'; установка перемен strcpy(kr,sm); копирует в kr путь без имени файла strrev(kr); реверс строки newfil = strstr(kr, "\\"); отрезает до "\" strrev(newfil);реверс строки strlwr(newfil);уменьшает символы Разделяем строку два параметра на первый for (int i=0;i<strlen(sm);i++){ if (sm[i]==' ')break; ff[i]=sm[i];} strncat(fs,ff,i); ptr7 = strstr(sm, " "); Чтобы ошибок небыло Разделяем строку два параметра на первый for (i=1;i<strlen(ptr7);i++){ if (ptr7[i]==' ')break; ffg[i-1]=ptr7[i];} strncat(fss,ffg,i-1); Чтобы ошибок небыло //****************************************************** char nbb[254]; уст перемен Если есть * if (strpbrk(fss,"*")){ strrev(fss); nbb[0]='\0'; реверс FSS for (int q=0;q<strlen(fss);q++){ Разделение на путь и фаил if (fss[q]!='\\') nbb[q]=fss[q];else break; } копируем в NBB путь strrev(fss);strrev(nbb); Реверсы //cout<<"\n REEEEE--- "<<nbb; } //____________________________________________________________ char dt[254],dt2[254]; dt[0]='\0'; dt2[0]='\0'; int fll=0,ii=-2; уст перемен Разделяем строку фаил на наз и расширение for (int q=0;q<strlen(nbb);q++){ цикл if (nbb[q]=='.') fll=1; Если точка то флаг 1 if (fll==0) {dt[q]=nbb[q]; } Если 0 копируем в DT if (fll==1) {ii++;dt2[ii]=nbb[q]; } Если 1 копируем в DT2 } //____________________________________________________________ //cout<<"\n REEEEE111--- "<<dt; //cout<<"\n REEEEE222--- "<<dt2; //--------------------------------------------------------------------------- struct ffblk ffblk; Структура о файле int done; done = findfirst(fs,&ffblk,0); ишет фаилы if (done==-1) cout<<"\nError"; если нет то ошибка while (!done) начало поиска { //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ zt[0]='\0'; zt2[0]='\0'; fll=0;ii=-2;nnj=ffblk.ff_name; ji=0;jiz=0; Установка перемен Разделение первого пар файла на имя и расширение for (q=0;q<strlen(nnj);q++){ цикл if (nnj[q]=='.') fll=1; если точка то флаг 1 if (fll==0) {ji++;zt[q]=nnj[q]; } Если 0 копируем в ZT if (fll==1) {jiz++;ii++;zt2[ii]=nnj[q]; } } Если 1 копируем в ZT2 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ zt[ji]='\0'; zt2[jiz-1]='\0'; char *rrr; rrr=NULL; Обнулить перем char *path2,bpn[254]; установка перем path2=GIP(fss); Обработка моей функции bpn[0]='\0'; strcpy(bpn,path2); копир в BPN Если во втором параметре есть звёздочки то из первого парам заменяется второй Замена у второго параметра имени именем первого параметра if (dt[0]!='*'){ strcat(bpn,dt); strcat(bpn,"."); } else { strcat(bpn,zt); strcat(bpn,"."); } if (dt2[0]!='*') strcat(bpn,dt2); else strcat(bpn,zt2); Замена у второго параметра расширения расширением первого параметра strlwr(bpn); уменьшение символов strcpy(kr,sm); копирует в kr путь без имени файла strrev(kr); реверс строки newfil = strstr(kr, "\\"); отрезает до "\" strrev(newfil);реверс строки strlwr(newfil);уменьшает символы FILCOP(GAD(fs,ffblk.ff_name),bpn); Обработка моей функции и копирование done = findnext(&ffblk); следующий фаил } //--------------------------------------------------------------------------- return (0); } //MAIN---------------------------------------------------------------------- void main() { char s[254],*ptr,*lptr; установка переменных gotoxy(16,0); установка текста в опред. части экрана cout<<"Interpretator commands DOS (COPY,DEL,REN)"; вывод на экран текста gotoxy(0,23); установка текста в опред. части экрана Enter: метка cout<<"\n>>>"; вывод на экран текста gets(s); strlwr(s); чтение с клавиатуры и уменшение символов //++++++++++++++++DEL================== strcpy(kr,sm); копирует в kr путь без имени файла strrev(kr); реверс строки newfil = strstr(kr, "\\"); отрезает до "\" strrev(newfil);реверс строки strlwr(newfil);уменьшает символы ptr = strstr(s, "del "); ишет "del " if (strlen(ptr)!=0) { если есть strcpy(s, ptr); копирует строку в S int i,vb=-1; char sg[254]; установка переменных for (i=4;i<strlen(s);i++){ Удаляет "del " vb++; sg[vb]=s[i]; заносит в sg } lptr=NULL; обнуляет lptr lptr=strtok(sg,""); Чтобы ошибок не было DELFILE(lptr); Собственная функция } //++++++++++++++++REN================== ptr = strstr(s, "ren "); ищет "ren " if (strlen(ptr)!=0) { если есть strcpy(s, ptr); копирут строку в S int i,vb=-1; char sg[254]; установка переменных for (i=4;i<strlen(s);i++){ удаляет "ren " vb++; sg[vb]=s[i]; заносит в SG } lptr=NULL; обнуляет lptr lptr=strtok(sg,""); Чтобы ошибок не было //*************************************************** char ff[254],fs[254],*ptr7,ffg[254],fss[254]; устовка переменных fs[0]='\0'; fss[0]='\0'; обнуление for (i=0;i<strlen(lptr);i++){ Разделение сткоки на два параметра if (lptr[i]==' ')break; Копирование в ff до пробела ff[i]=lptr[i];} strncat(fs,ff,i); Чтобы ошибок не было ptr7 = strstr(lptr, " "); ишет пробел for (i=1;i<strlen(ptr7);i++){ Удаляет пробел и копирует в FFG if (ptr7[i]==' ')break; ffg[i-1]=ptr7[i];} strncat(fss,ffg,i); Чтобы ошибок не было //*************************************************** RENFILE(fs,fss); Собственная функция } //++++++++++++++++COPY================== ptr = strstr(s, "copy "); ешет "copy " if (strlen(ptr)!=0) { Удаляет "copy " strcpy(s, ptr); копирут строку в S int i,vb=-1; char sg[254]; Установка перем for (i=5;i<strlen(s);i++){ Удаляет copy vb++; sg[vb]=s[i]; копирует в SG } lptr=NULL; обнуляет lptr lptr=strtok(sg,""); Чтобы ошибок не было strcpy(kr,sm); копирует в kr путь без имени файла strrev(kr); реверс строки newfil = strstr(kr, "\\"); отрезает до "\" strrev(newfil);реверс строки strlwr(newfil);уменьшает символы ptr =strstr(lptr,"con "); ишет "con " if (ptr){ cout<<"\nNot is function, re-enter"; goto Enter; } Если есть выводит сообщение ptr =strstr(lptr,"+"); ишет + if (ptr){ cout<<"\nNot is function, re-enter"; goto Enter; } Если есть выводит сообщение COPYES(lptr); Собственная функция } //++++++++++++++++EXIT================== ptr = strstr(s, "exit"); ишет "exit" strcpy(kr,sm); копирует в kr путь без имени файла strrev(kr); реверс строки newfil = strstr(kr, "\\"); отрезает до "\" strrev(newfil);реверс строки strlwr(newfil);уменьшает символы if (strlen(ptr)!=0) exit(EXIT_FAILURE); если есть то выход программы goto Enter; на метку }
Страницы: 1, 2
|