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

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;

}

}

Функция переименования:

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