Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metodichka_SI.doc
Скачиваний:
30
Добавлен:
23.02.2015
Размер:
2.05 Mб
Скачать

Работа с каталогами

Цель: закрепление на практике знаний работы с библиотекой <direct.h>.

Методические рекомендации: лабораторная работа рассчитана на 2 часа и состоит из анализа одного разобранного задания и решения самостоятельной работы.

Обязательное зачетное задание.

Необходимый уровень знаний:

  • работа с функциями.

Задача

  1. Определить находится ли файл с заданным именем на данном компьютере. Если находится, вывести путь к файлу.

  2. Вывести все логические диски на данном компьютере и информацию о файле с заданным именем.

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

//

#include <direct.h>

// библиотека для работы с методами ввода-вывода

#include <io.h>

// библиотека для работы с временем

#include <time.h>

// вывод меню выбора на экран

void printMenu()

{

printf("\n");

printf("\n=================================");

printf("\n============ MENU ===============");

printf("\n=================================\n");

printf("1. Search file on local drives\n");

printf("2. Show all avaliable drives\n");

printf("3. Show file info\n");

printf("4. Exit\n");

printf("\n");

printf("Your choice: ");

}

// поиск файла на дисках

void findFile(char* name)

{

char pathbuffer[_MAX_PATH];

char envvar[] = "PATH";

// ищет файл на диск и записывает в переменную pathbuffer путь к нему

_searchenv( name, envvar, pathbuffer );

if( *pathbuffer != '\0' )

{

printf( "Path for %s:\n%s\n", name, pathbuffer );

}

else

{

printf( "%s not found\n", name );

}

}

// получение списка локальных дисков

void getLocalDrives()

{

int drive, uErr;

// хранит информацию о логическом диске

struct _diskfree_t df = {0};

printf( "Available drives are:\n" );

// возможно иметь не более 26 логических дисков

for( drive = 1; drive <= 26; drive++ )

{

// получение информации о диске

uErr = _getdiskfree(drive, &df);

// если информация получена - диск доступен, в противном случае нет

if (uErr == 0)

{

printf( "%c:\\\n", drive + 'A' - 1 );

}

}

}

// форматирование даты dateпо маске задаваемойformatter

char* format(char *formatter, time_t* date)

{

char *str = (char*) malloc (128 * sizeof(char));

strftime(str, strlen(str), formatter, localtime(date));

return str;

}

// получение информации о файле

void getFileInfo(char* name)

{

// структура с информацией о файле

struct _finddata_t fdate = {0};

// строка форматирования даты дд.ММ.гггг чч:мм:сс

char *formatter = "%d.%m.%y %H:%M:%S";

// ищет первый соответствующий файл на дисках

if (_findfirst(name, &fdate) != -1)

{

// выводит информацию о файле -

// имя, размер, дату создания, доступа и последнего изменения

printf("About:\n");

printf("name: %s\n", fdate.name);

printf("size: %.3lf Kb\n", ((double) fdate.size) / ((double)1024));

printf("created: %s\n", format(formatter, &fdate.time_create));

printf("accessed: %s\n", format(formatter, &fdate.time_access));

printf("modified: %s\n", format(formatter, &fdate.time_write));

}

else

{

printf("No files been founded");

}

}

int main (int argc, char* argv[])

{

bool exit = false;

int choice;

while (!exit)

{

printMenu();

scanf("%d", &choice);

char* name = (char*) malloc (255 * sizeof(char));

switch(choice)

{

case 1:

printf("\n\n-------------------------\n");

printf("Input file name for search: ");

scanf("%s", name);

findFile(name);

break;

case 2:

printf("\n\n-----------------------\n");

getLocalDrives();

break;

case 3:

printf("\n\n-----------------------------\n");

printf("Input file name to view info: ");

scanf("%s", name);

getFileInfo(name);

break;

case 4: exit = true;

break;

}

free(name);

}

return0;

}

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