Лабораторная работа №1 Вариант 11
.doc
Липецкий государственный технический университет
КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ
Лабораторная работа №1
по дисциплине
«Операционные системы»
на тему:
«Работа в файловой системе Windows с использованием Windows API»
|
Студент |
|
|
|
Ключанских А.С |
|
||||||||
|
|
|
подпись, дата |
|
фамилия, инициалы |
|
||||||||
|
Группа |
|
АС-10 |
|
|
|
|
|||||||
|
|
|
|
|
|
|
||||||||
|
Принял |
|
|
|
|
|
||||||||
|
доцент |
|
|
|
Журавлева М.Г. |
|
||||||||
|
ученая степень, звание |
|
подпись, дата |
|
фамилия, инициалы |
|
Липецк 2012
-
Задание кафедры
Вариант 11.
Написать программу удаления (с подтверждением/отменой) всех файлов, заданных 2-м, 3-м, …, n-м (n 8) параметрами командной строки, в которых более k раз (k задано последним параметром командной строки) встретилось слово, заданное первым параметром командной строки.
Ограничения:
а) программа разрабатывается на языке С/С++;
б) следует использовать символы Unicode;
в) предусмотреть возможность вывода результатов на консоль и перенаправления стандартного вывода, а также возможность ввода с клавиатуры и перенаправления стандартного ввода. Для перенаправления следует предусмотреть символы, которые пользователь будет, при необходимости, указывать в командной строке.
-
Листинг программы
// 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;
}
-
Контрольный пример
-
Библиографический список
-
Харт, Джонсон, М. Системное программирование в среде Windows, 3-е издание. : Пер. с англ. – М. : Издательский дом «Вильямс», 2005. – 592с. ил.