- •Оглавление
- •Введение:
- •Задание:
- •Функциональные клавиши:
- •Используемые системные вызовы и библиотечные функции:
- •Порядок создания библиотеки
- •Directory.H
- •Drawlib.H
- •Описание собственных функций
- •Cхема алгоритма
- •Intmakedir(char*path);
- •Int fcopy (char* path, struct dirent **list, int poskurs, char* othpath);
- •Int positionkurs – положение курсора в списке файлов.
- •Int remdf(char*path);
- •Int cutf(char*path, char*pathD);
- •Void name(char nn[33]);
- •Voidaccesscheck();
- •Voidaccessdev();
- •Void printerror(const char* text);
- •Void printerror(const char* text)
- •Порядок создания собственных библиотек :
- •Результат работы программы
- •Список литературы
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;
}
}
Функция переименования: