У вас вопросы?
У нас ответы:) SamZan.net

ЛАБОРАТОРНАЯ РАБОТА 14 DIRFILE УПРАВЛЕНИЕ НАКОПИТЕЛЯМИ КАТАЛОГАМИ ФАЙЛАМИ Управление накопителямиПро

Работа добавлена на сайт samzan.net: 2016-03-13

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 7.3.2025

/*                     ЛАБОРАТОРНАЯ РАБОТА 14 (DIR_FILE)
  УПРАВЛЕНИЕ НАКОПИТЕЛЯМИ, КАТАЛОГАМИ, ФАЙЛАМИ
     Управление накопителями
Прототипы функций описаны в заголовочном файле dir.h.

int getdisk(void);  - функция возвращает номер текущего диска  (0 - A, 1 - B, 2 - C и т.д.).

int setdisk(int drive); - функция устанавливает текущим диск  в соответствии с drive (0 - A, 1 - B, 2 - C и т.д.).

     Управление каталогами

Прототипы всех функций описаны в заголовочном файле dir.h.

В некоторых функциях используются строки, максимальная длина которых указана в макроопределениях с учетом '\0':

MAXPATH  (значение - 80) - путь

MAXDRIVE (значение -  3) - диск, включая двоеточие

MAXDIR   (значение - 66) - каталог, включая '\'

MAXFILE  (значение -  9) - файл

MAXEXT   (значение -  5) - расширение, включая '.'

int chdir(const char *path); - функция изменяет текущий каталог в соответствии с path. Поиск ведется на текущем диске. Имя каталога задается относительно текущего или корневого каталога. Возврат при ошибке: 1.

int mkdir(const char *path); - функция создает один  каталог с именем, определенным path. Возврат при ошибке: -1.

int rmdir(const char *path); - функция удаляет один  каталог с именем, определенным path. Каталог должен быть пустым, не текущим, не корневым. Возврат при ошибке: 1.

int getcurdir(int drive, char *directory); - функция читает имя текущего каталога на устройстве drive (0 - по умолчанию, 1 - A, 2 - B, 3 - C и т.д.). Результат - в directory. Имя каталога не включает имя корневого каталога. Возврат при ошибке: -1.

char *getcwd(char *buf, int buflen); - функция читает полное имя текущего каталога (включая диск) в buf размером не более buflen. Результат - указатель на строку вида: C:\FFF\YYY. Возврат при ошибке: NULL.

int findfirst(const char *path, struct ffblk *ffblk, int attrib);

Функция ищет первый файл или каталог с данным именем и аттрибутом. Имя с указанием пути и диска ( возможно  использование ? и * в имени). Атрибут (attrib) может иметь значения (необходимо пдключить dos.h):

0            - файл для чтения и записи

FA_RDONLY    - файл для чтения

FA_HIDDEN    - скрытый файл

FA_SYSTEM    - системный файл

FA_LABEL     - метка тома

FA_DIREC     - каталог

FA_ARCH      - архив.

Для найденного файла или каталога заполняется структура ffblk, cодержащая*/

char       ff_reserved[21];

char       ff_attrib;         /* атрибут */

unsigned   ff_ftime;          /* время   */

unsigned   ff_fdate;          /* дата    */

long       ff_fsize;          /* размер  */

char       ff_name[13];       /* имя     */

/*Возврат при ошибке: -1.

int findnext(struct ffblk *ffblk); - функция возвращает следующий файл или каталог с заданным именем и атрибутом (см.выше).

char *searchpath(const char *file); -  поиск файла  по  имени сначала в текущем каталоге, а затем по установленным  путям поиска. Результат - адрес строки с полным именем файла, начиная с имени диска.

/*Возврат при ошибке: NULL.

void fnmerge(char *path,const char *drive,const char *dir, const char *name, const char *ext);

Функция создает полное имя файла (path) из отдельных  компонент: имя диска, каталога (путь), файла, расширения.

int fnsplit(const char *path, char *drive, char *dir,  char *name, char *ext);

Функция разбивает полное имя (path) на составляющие компоненты (обратная fnmerge), каждая компонента обязательна, но может быть нулевой строкой.

     Управление файлами

       Временный файл

Прототипы функций описаны в заголовочном файле stdio.h.

char *tmpnam(char *s); - функция генерирует  имя  временного файла и помещает его в строку с указателем  s. Возврат при ошибке: NULL.

FILE   * tmpfile  (void); - создает  и  открывает  временный файл в режиме "w+", возвращает указатель потока. После выполнения программы временные файлы удаляются. Возврат при ошибке: NULL.

int rmtmp(void) - функция удаляет временные файлы, созданные с помощью tmpfile, в текущем каталоге. Возвращает число удаленных файлов.

       Генерация имени

char *mktemp(char *template); - прототип в dir.h.

Функция создает уникальное имя с помощью модификации заданного имени template вида baseXXXXXX, где base - задается пользователем, XXXXXX - формируется функцией.Результат - адрес строки с именем. Возврат при ошибке: NULL.

       Доступ к файлу

Прототипы функций в заголовочном файле io.h.

int access(const char *path, int amode); - функция проверяет существование файла и режимы доступа к нему (amode): 00 - существование, 04 - чтение, 02 - запись, 06 - чтение/ запись). Возврат: 0 - доступ разрешен, 1 - доступ не разрешен.

int chmod(const char *path, int amode); - изменить права доступа (amode):

S_IWRITE - запись,  S_IREAD - чтение,  S_IWRITE | S_IREAD -запись и чтение.

Необходимо подключить sys\stat.h. Возврат при ошибке: 1.

        Размер файла

Прототипы функций в io.h.

long filelength (int handle); -  функция  возвращает  длину в байтах файла с дескриптором handle. Возврат при ошибке: -1.

int chsize(int handle, long size); - функция расширяет (дозапись '\0') или сужает (обрезает с конца) файл с дескриптором handle до длины size. Возврат при ошибке: -1.

    Действия над файлом

Прототипы функций описаны в stdio.h.

int remove(const char *c); - функция удаляет файл с заданным именем.

Возврат при ошибке: -1.

int unlink(const char *path); - функция удаляет файл с заданным именем, прототип и в io.h. Возврат при ошибке: -1.

int rename(const char *oldname, const char *newname);

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

Пример 1.

/* С помощью функции getcurdir формируется имя текущего ката   лога включая и имя диска и имя корневого каталога */

#include <dir.h>

#include <stdio.h>

#include <string.h>

char *current_directory(char *path)

{

  strcpy(path, "X:\\");      /* в строку path записывается X:\  */

  path[0] = 'A' + getdisk();    /* замена X на текущее имя диска */

  getcurdir(0, path+3); /* с четвертой позиции строки path записывается текущий каталог на текущем диске */

  return(path);

}

int main(void)

{

  char curdir[MAXPATH];

  current_directory(curdir);

  printf("Текущий каталог  %s\n", curdir);

  return 0;

}

/* Пример 2.

/* С помощью fnsplit поразбить имя на составляющие части. */

#include <stdio.h>

#include <dir.h>

int main(void)

{

   char *s="\autoexec.bat";

   char drive[MAXDRIVE];

   char dir[MAXDIR];

   char file[MAXFILE];

   char ext[MAXEXT];

   int flags;

/* flags указывает заданы ли все компоненты в строке s */

   flags=fnsplit(s,drive,dir,file,ext);

   printf("Command processor info:\n");

   if(flags & DRIVE)      /* сформировано ли имя диска */

      printf("\tdrive: %s\n",drive);

   if(flags & DIRECTORY)  /* сформировано ли имя каталога */

      printf("\tdirectory: %s\n",dir);

   if(flags & FILENAME)   /* сформировано ли имя файла */

      printf("\tfile: %s\n",file);

   if(flags & EXTENSION)  /* сформировано ли расширение */

      printf("\textension: %s\n",ext);

   return 0;

}

  /*                     ЗАДАНИЕ

  Вариант 1

    Определить имена существующих дисков.

  Вариант 2

    Создать каталог внутри личного. Объявить  его  текущим. Переместить все файлы с расширением exe из личного  каталога в созданный. Удалить файлы, запрашивая разрешение на удаление для каждого файла.

  Вариант 3

    Имя файла        . Установить на каком диске, в  каком каталоге записан файл. Создать файл (пустой) с таким же именем, но с расширением my в родительском каталоге.

  Вариант 4

    Из текущего каталога прочитать и выдать на дисплей файлы, предназначенные только для чтения и их размеры.

  Вариант 5

    Определить на каком диске существует каталог с именем        , определить его размер, дату создания, объявить  его текущим.

  Вариант 6

    У всех файлов в текущем каталоге с расширением exe изменить права доступа - разрешить только чтение. Попытаться удалить один из файлов.

  Вариант 7

    Создать каталог в корневом каталоге. Объявить его текущим, создать несколько пустых файлов (количество по запросу) с именами, созданных с помощью модификации имени file. Определить длину этих файлов.mktemp

  Вариант 8

    Найти самый длинный файл в каталоге (имя - по запросу).

  Вариант 9

    Создать каталог внутри личного. Переместить  туда  все файлы с расширением bak и выдать на дисплей информацию о них: время, дату создания, размер.

  Вариант 10

    Ввести с дисплея имя диска, каталога, файла и расширения. Создать указанный файл (пустой). Если каталог не существует -создать его. Исходные данные: С, \MMPP\PPUT, file5, mtm.




1. Д Голев Алтайский госуниверситет г
2. ТЕМА- Експертиза інвалідності порядок її проведення різними видами МСЕК зміст їх роботи первинний вторин
3. 2 Сущность международных бирж
4. Тема Инфляция. 11 класс
5. Технология монтажа металлических конструкций
6. Жидкие кристаллы
7. Организация производства и планирование
8. Борьба с внутренними обстоятельствами за высокую работоспособность
9. реферат дисертації на здобуття наукового ступеня кандидата економічних наук.3
10. а ЗЭЭ09Б4 4 студента 5 КУРС 9 семестp Зимняя с