Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №1 Вариант 11

.doc
Скачиваний:
23
Добавлен:
20.06.2014
Размер:
361.47 Кб
Скачать

2

Липецкий государственный технический университет

КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ

Лабораторная работа №1

по дисциплине

«Операционные системы»

на тему:

«Работа в файловой системе Windows с использованием Windows API»

Студент

Ключанских А.С

подпись, дата

фамилия, инициалы

Группа

АС-10

Принял

доцент

Журавлева М.Г.

ученая степень, звание

подпись, дата

фамилия, инициалы

Липецк 2012

  1. Задание кафедры

Вариант 11.

Написать программу удаления (с подтверждением/отменой) всех файлов, заданных 2-м, 3-м, …, n-м (n  8) параметрами командной строки, в которых более k раз (k задано последним параметром командной строки) встретилось слово, заданное первым параметром командной строки.

Ограничения:

а) программа разрабатывается на языке С/С++;

б) следует использовать символы Unicode;

в) предусмотреть возможность вывода результатов на консоль и перенаправления стандартного вывода, а также возможность ввода с клавиатуры и перенаправления стандартного ввода. Для перенаправления следует предусмотреть символы, которые пользователь будет, при необходимости, указывать в командной строке.

  1. Листинг программы

// os.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <windows.h>

#include <locale.h>

#define MAX_SIZE 256

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL, "Russian");

HANDLE fp;

DWORD fact, count, kolvo_vh;

CHAR Buffer[MAX_SIZE];

wint_t ch;

DWORD search_word_length;

if(argc < 4 || argc > 10){

printf("Неверное количество параметров. Попробуйте снова\n");

return 1;

}

search_word_length = wcslen(argv[1]);

DWORD k = _wtoi(argv[argc-1]);

for(int i=2;i<(argc-1);i++)

{

fp = CreateFile(argv[i],GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);

if(fp == INVALID_HANDLE_VALUE) {

printf("Ошибка открытия файла %ws. Возможно, такой файл не существует в данной директории.\n",argv[i]);

return 2;

}

memset(Buffer,'\0',256);

ReadFile(fp,Buffer,MAX_SIZE,&fact,NULL);

kolvo_vh = count = 0;

for(unsigned int j=0;j<fact;j++)

{

if(Buffer[j]!=argv[1][count])

{

count = 0;

continue;

}

count++;

if((count+1) == search_word_length)

{

count = 0;

kolvo_vh++;

}

}

if(kolvo_vh > k)

{

printf("Файл %ws содержит более %d вхождений слова %ws. Удалить его? (y/n)\n",argv[i],k,argv[1]);

do{

ch = getwchar();

switch(ch){

case 'y':

CloseHandle(fp);

DeleteFile(argv[i]);

printf("Файл %ws успешно удален.\n",argv[i]);

break;

case 'n':

printf("Файл %ws не будет удален по Вашему требованию. Программа продолжит работу.\n",argv[i]);

CloseHandle(fp);

break;

default:

printf("Введите либо 'y', либо 'n' (без кавычек).\n");

}

}while(ch != 'y' && ch != 'n');

}

else

{

printf("Файл %ws содержит %d вхождений слова %ws. Он не требует удаления.\n",argv[i],kolvo_vh,argv[1]);

CloseHandle(fp);

}

}

return 0;

}

  1. Контрольный пример

  1. Библиографический список

  1. Харт, Джонсон, М. Системное программирование в среде Windows, 3-е издание. : Пер. с англ. – М. : Издательский дом «Вильямс», 2005. – 592с. ил.