![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Возвращаемое значение при ошибке -1.Содержание книги
Поиск на нашем сайте
Схема алгоритма:
Функция копирования: int fcopy (char* path, struct dirent **list, int poskurs, char* othpath) { WINDOW *w; FILE *file1, *file2; char* str; DIR *d; mode_t filemod; struct stat inf; struct dirent *readc; int f1,f2,r; str=(char*)malloc(PATH_MAX); w = newwin(WLINES, WCOLS, Wy+1, Wx+1); char* copyname; copyname=(char*)malloc(PATH_MAX); char* newpath; newpath=(char*)malloc(PATH_MAX); char* buf[BUFSIZ]; copyname=list[poskurs]->d_name; noecho(); curs_set(0); wrefresh(w); wattrset(w,COLOR_PAIR(10)); werase(w); box(w,0,0); wmove(w,0,(WCOLS-8)/2+3); wattrset(w,COLOR_PAIR(10)); wprintw(w, "Copy File"); wattrset(w,COLOR_PAIR(10)); for (int i=1;i<=WCOLS-2;i++) for (int j=1;j<=WLINES-2;j++) { mvwaddstr(w,j,i," "); } wattrset (w, COLOR_PAIR(12)); for (int i=4;i<=WCOLS-6;i++) mvwaddstr(w, WLINES/2, i, " "); wrefresh(w);
wattrset(w, COLOR_PAIR(10)); mvwaddstr(w,WLINES/2-2,(WCOLS-2)/2-3, "Enter a new name"); wattrset(w,COLOR_PAIR(10)); mvwaddstr(w,WLINES/2+2,(WCOLS-2)/2, "OK"); wrefresh(w); echo(); wattrset(w, COLOR_PAIR(12)); wmove(w, WLINES/2,4); keypad(w, TRUE); wgetstr(w, str); noecho(); strcpy(newpath,othpath); strcat(newpath, "/"); strcat(newpath, str); stat(getfullname(path,list[poskurs]->d_name), &inf); filemod=inf.st_mode; if (S_ISDIR(inf.st_mode)) { if ((mkdir(newpath,filemod))<0) { printerror ("Unable to create such folder"); goto out; } char* dir=getfullname(path,list[poskurs]->d_name); d=opendir(dir); while ((readc=readdir(d))!=NULL) { if (!strcmp(readc->d_name,"..") ||!strcmp(readc->d_name,".")) continue; f1=open(getfullname(dir,readc->d_name), O_RDONLY, filemod); strcpy(copyname,newpath); strcat(copyname,"/"); strcat(copyname,readc->d_name); if ((f2=open(copyname, O_CREAT | O_WRONLY, filemod))<0) { printerror ("Unable to create such file"); goto out; } while(r=read(f1,buf,sizeof(buf))) write(f2,buf,r); close(f1); close(f2); } closedir(d); } else { f1=open(getfullname(path,list[poskurs]->d_name), O_RDONLY, filemod); f2=open(newpath, O_CREAT | O_WRONLY, filemod); while(r=read(f1,buf,sizeof(buf))) write(f2,buf,r); close(f1); close(f2);} out: delwin(w); refresh(); }
Функция удаления: int remdf(char*path); Данная функция удаляет выбранный файл или каталог с вложенными в него файлами. При удачном завершении каталог или файл удаляются, иначе выводится окно с ошибкой.
Параметры функции: char* path – путь к текущему объекту; Используемые библиотеки: аналогично используемым в makedir(); Тип возвращаемого значения- целое число. Возвращаемое значение при ошибке -1.
Схема алгоритма
Функция удаления: int remdf(char*path) { DIR*dir; struct dirent*d; struct stat buf; stat(path,&buf); if(access(path,R_OK)<0) { printerror("No right of access!"); return -1; } if(S_ISDIR(buf.st_mode)!=1) { unlink(path); return 0; } else { dir=opendir(path); while((d=readdir(dir))!=NULL) { if(!strcmp(d->d_name,"..")||(!strcmp(d->d_name,"."))) continue; if(remdf(getfullname(path,d->d_name))==-1) return -1; } closedir(dir); rmdir(path); return 0; } }
Функция перемещения: int cutf(char*path, char*pathD);
Функция перемещения файла, либо каталога с вложенными в него файлами. При вызове появляется окно с вводом нового имени, а после файл или каталог перемещаются по заданному пути в соседней панели. При неудачном завершении появится окно с ошибкой. char buf[5000] – буфер для чтения/записи; char n_name[33] – буфер для нового имени; int file1, file2 – дескрипторы файлов; int skr, skw – переменные для чтения/записи; DIR*dir – каталог; struct dirent d – структура для чтения каталога; struct stat tip – структура для получения информации о файлах.
Параметры функции: char* path – путь к текущему объекту; char* pathD – новый путь к объекту; Используемые библиотеки: аналогично используемым в fcopy(); Тип возвращаемого значения- целое число. Возвращаемое значение при ошибке -1.
Схема алгоритма Функция перемещения: int cutf(char*path, char*pathD) { char buf[5000]; char n_name[33]; int file1, file2, skr, skw; DIR*dir; struct dirent*d; struct stat tip; stat(path,&tip); if(!S_ISDIR(tip.st_mode)) { file1=open(path,O_RDONLY,S_IRWXU); if(access(path,R_OK)<0) { if(errno==EACCES) { printerror("No right of access!"); return -1; } } name(n_name); file2=open((getfullname(pathD,n_name)),O_EXCL|O_CREAT|O_WRONLY,S_IRUSR|S_IWUSR); skr=read(file1,buf,100); skw=write(file2,buf,skr); skr=close(file1); skw=close(file2); unlink(path); return 0; } else { dir=opendir(path); if(access(path,R_OK)<0) { if(errno==EACCES) { printerror("No right of access!"); return -1; } } name(n_name); mkdir(getfullname(pathD,n_name),S_IRWXU); chdir(path); rewinddir(dir); while((d=readdir(dir))!=NULL) { if((strcmp(".",d->d_name)==0)||(strcmp("..",d->d_name)==0)) continue; file1=open(d->d_name,O_RDONLY,S_IRWXU); file2=open(getfullname(getfullname(pathD,n_name),d->d_name),O_EXCL|O_CREAT|O_WRONLY,S_IRUSR|S_IWUSR); skr=read(file1,buf,100); skw=write(file2,buf,skr); skr=close(file1); skr=close(file2); unlink(d->d_name); } closedir(dir); chdir(".."); rmdir(path); return 0; } }
Функция переименования: void name(char nn[33]); Функция переименования. При вызове появляется окно с вводом информации. Используемые библиотеки: данные функции находятся в файле drawlib.cpp поэтому библиотеки там уже были подключены заранее
|
|||||
Последнее изменение этой страницы: 2016-04-07; просмотров: 183; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.97.9.172 (0.009 с.) |