Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 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; просмотров: 158; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.17.28.48 (0.014 с.) |