Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой 261.docx
Скачиваний:
3
Добавлен:
27.09.2019
Размер:
608.29 Кб
Скачать

Функция перемещения:

int cutf(char*path, char*pathD);

Функция перемещения файла, либо каталога с вложенными в него файлами. При вызове появляется окно с вводом нового имени, а после файл или каталог перемещаются по заданному пути в соседней панели. При неудачном завершении появится окно с ошибкой.

charbuf[5000] – буфер для чтения/записи;

charn_name[33] – буфер для нового имени;

int file1, file2 – дескрипторыфайлов;

intskr, skw – переменные для чтения/записи;

DIR*dir – каталог;

structdirentd – структура для чтения каталога;

structstattip – структура для получения информации о файлах.

Параметры функции:

char* path – путь к текущему объекту;

char* pathD – новый путь к объекту;

Используемые библиотеки: <fcntl.h><curses.h><dirent.h><stdlib.h><string.h><sys/dir.h><sys/stat.h><unistd.h><errno.h>

Тип возвращаемого значения - целое число.

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

Схема алгоритма

Исходный код:

intcutf(char*path, char*pathD)

{charbuf[5000];

charn_name[33];

int file1, file2, skr, skw;

DIR*dir;

structdirent*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 поэтому библиотеки там уже были подключены заранее

Тип возвращаемого значения - void.

Схема алгоритма

Исходный код:

void name(char nn[33])

{WINDOW*w;

const char*namewin="Move/Rename";

w=newwin(WLINES,WCOLS,Wy+1,Wx+1);

wrefresh(w);wattrset(w,COLOR_PAIR(10));werase(w);box(w,0,0);

wmove(w,0,(WCOLS-strlen(namewin))/2);wattrset(w,COLOR_PAIR(12));

wprintw(w," %s ",namewin);wattrset(w,COLOR_PAIR(10));

for(inti=1;i<=(WCOLS-2);i++)

for(int j=1;j<=(WCOLS-2);j++)

mvwaddstr(w,j,i," ");mvwaddstr(w,WLINES/2-2,(WCOLS-16)/2,"Input new name");

wattrset(w,COLOR_PAIR(10));mvwaddstr(w,WLINES/2+2,(WCOLS-2)/2,"OK");

wattrset(w,COLOR_PAIR(4));for(inti=3;i<=(WCOLS-4);i++)

mvwaddstr(w,WLINES/2,i," ");wmove(w,WLINES/2,3);echo();

curs_set(1);wgetstr(w,nn);noecho();curs_set(0);delwin(w);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]