Практика программирования (Бейсик, Си, Паскаль)



         

Задачи, советы и ответы - часть 5


Написать программу, которая извлекает из командной строки имя файла и создает в том же каталоге резервную копию файла с расширением bak.

Совет 1 (общий)

Чтобы избежать нежелательного влияния управляющих символов с кодами о о ("Возврат каретки"), ОА ("Перевод строки"), 1А ("Признак конца файла") целесообразно рассматривать резервируемые данные независимо от их происхождения как двоичный файл.

Совет 2 (QBasic)

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

Совет 3 (Си)

Функция strchr (namel,'.') определяет позицию точки в имени исходного файла. Точнее, ее значение равно указателю на позицию точки, если таковая в имени namel содержится. В противном случае функция strchr возвращает NULL. В первом случае с помощью функции strncpy в строку name2 копируется начало имени до символа '.'и скопированная часть имени принудительно завершается признаком конца строки (символом 0x0).

Совет 4 (Паскаль)

Отключение системного контроля за ошибками ввода/вывода ({$!-}) перед открытием исходного файла сделано для того, чтобы взять на себя проверку несостоявшейся операции и выдать пользователю более осмысленное сообщение. Функция fsplit расчленяет полную спецификацию файла на путь до

каталога, содержащего исходный файл (Dir), собственно имя файла (Name) и его расширение (Ext). Программа будет работать быстрее, если размер буфера для копирования очередной порции увеличить до 32 768 (кратность 512 здесь желательна, т. к. это число совпадает с длиной физического сектора).

Программа 7_07.bas

CLS : DIM k AS STRING*!

INPUT "Задайте имя файла - ", NAME1$

OPEN NAME1$ FOR BINARY AS #1

К = INSTR(NAME1$, ".")

IF К = 0 THEN NAME2$ = NAME1$

ELSE NAME2$ = LEFT$(NAME1$, К - 1)

NAME2$ = NAME2$ + ".ВАК"

PRINT NAME2$, К

OPEN NAME2$ FOR BINARY AS §2

DO

GET fl, , k

PUT #2, , k

LOOP UNTIL (EOF(l))

END

Программа 7_07.с




Содержание  Назад  Вперед