КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Дополнительные функции для работы с файлами
Else Else Else Else Do { // Открываем файл с сгенерированным именем для чтения очередного фрагмента. // Если открылся if ((f = fopen(get_cur_name(new_name, base_name, ext, num_part, format_str, cur_number++), "rbS"))!= NULL) { if (buf == NULL) { part_size = filelength(fileno(f)); buf = new char [part_size]; } /* { Читаем данные (необходимо 2-ой аргумент функции _read привести к типу данных нетипизированный указатель (void *)) и определяем, сколько прочитано. Если не ошибка */ if ((cnt_read = fread((void *)(buf), 1, part_size, f)) > 0) { // Записываем столько, сколько прочитали fwrite((void *)(buf), 1, cnt_read, f_out); // Закрываем очередной входной файл fclose(f); } } break; // Пока количество прочитанных байт совпадает с размером фрагмента }while (cnt_read == part_size); // Закрываем исходный файл fclose(f_out); delete []buf; delete []base_name; delete []ext; } delete []new_name; delete []format_str; delete []num_part; return f == NULL? -1: 0; } //---------------------------------------------------------------- main(int argc, char *argv[]) { char *name, *name_out; UINT quantity; // Если есть хотя бы 1 аргумент командной строки if (argc >= 1) { // 0-ой элемент массива argv хранит путь к исполнимому файлу программы name = new char [strlen(argv[1]) + 1]; // Считываем его как имя файла strcpy(name, argv[1]); } // Иначе вводим с клавиатуры { name = new char [MAX_NAME + 1]; printf("Enter file name of some parts of source file: "); scanf("%s", name); } // Если 2-ой аргумент командной строки if (argc >= 2) { // Переводим его в числовой вид и интерпретируем как количество фрагментов // Для перевода в целочисленный вид используется функция atoi, прототип // которой описан в файле stdlib.h quantity = atoi(argv[2]); } // Если 2-ого аргумента командной строки нет или // перевод в число был неудачен, то считываем с клавиатуры if (argc < 2 || quantity == 0) { printf("Enter file name: "); scanf("%u", &quantity); } if (argc >= 3) { // 0-ой элемент массива argv хранит путь к исполнимому файлу программы name_out = new char [strlen(argv[3]) + 1]; // Считываем его как имя файла strcpy(name_out, argv[3]); } // Иначе вводим с клавиатуры { name_out = new char [MAX_NAME + 1]; printf("Enter output file name: "); scanf("%s", name_out); } if (read_parts(name, quantity, name_out) == -1) puts("An error was found! Check filename and try once more!"); puts("Operation was successfully completed"); delete []name; delete []name_out; return 0; } Для того, чтобы задать аргументы командной строки при запуске из среды Microsoft Visual Studio 6.0, необходимо выбрать пункт меню Project\Settings (или нажать сочетание клавиш Alt + F7), в открывшемся диалоговом окне выбрать вкладку Debug и на этой вкладке в окне редактирования Program arguments ввести через пробел необходимое количество аргументов командной строки.
Рассмотрим некоторые функции, предназначенные для работы с неоткрытыми файлами (для их использования необходимо подключить stdio.h или io.h): 1. int remove (const char *path) – выполняет удаление файла, указанного своим именем (1-ый аргумент). Если файл удален успешно, то функция возвращает 0, иначе -1. 2. int rename (const char *oldname, const char *newname) – переименовывает файл или каталог, заданный своим именем (1-ый аргумент), изменяя его имя на 2-ой аргумент. Если переименование выполнено успешно, то функция возвращает 0, иначе - не 0. Задание
1. Для получения 100% от числа баллов, отводимых на лабораторную работу, необходимо написать программу, которая осуществляет шифрование / дешифрование файла, используя при этом блочную работу с файлом и пароль длиной от 1 до 30 символов. 2. Для получения 75% от числа баллов, отводимых на лабораторную работу, необходимо написать программу, которая осуществляет шифрование / дешифрование файла, используя при этом пароль длиной от 1 до 30 символов (Можно использовать посимвольный обмен данными с файлами). 3. Для получения 65% от числа баллов, отводимых на лабораторную работу, необходимо написать программу, осуществляет шифрование / дешифрование файла, используя при этом пароль длиной 1 символ (Можно использовать посимвольный обмен данными с файлами).
Входные данные: · имя исходного файла вводится через аргументы командной строки или с клавиатуры. Необходимо проверить удачность открытия файла, в случае неудачи вывести сообщение об ошибки и прекратить работу программы; · имя выходного файла вводится через аргументы командной строки или с клавиатуры. Необходимо проверить удачность открытия файла, в случае неудачи вывести сообщение об ошибки и прекратить работу программы; · пароль вводится через аргументы командной строки или с клавиатуры. Выходные данные: · выходной файл (зашифрованный или расшифрованный).
Алгоритм шифрования / дешифрования следующий: Над каждым символом исходного файла проводится побитовая операция ^ (побитовое исключающее «ИЛИ») с текущим символом пароля, т.е. cout = cin ^ p; где cout – текущий символ выходного файла; сin – текущий символ исходного файла; p – текущий символ пароля. Таким образом, вышеописанный алгоритм является симметричным, т.е. один и тот же пароль используется для шифрования и дешифрования. Поэтому режим шифрования или дешифрования явно не указывается. Текущий символ пароля (если выполняется вариант задания с многосимвольным паролем) выбирается следующим образом: от 1-ого до последнего, по достижению последнего символа следующим снова выбирается первый символ и т.д.
Программа должна быть написана с применением процедурно-ориентированного подхода (использовать пользовательские функции).
Дата добавления: 2017-01-14; Просмотров: 794; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |