Возвращаемое значение при ошибке -1. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Возвращаемое значение при ошибке -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 с.)