Программа FCOPY
Программа FCOPY (листинг 19) демонстрирует использование функции FileServerFileCopy(). При запуске этой программе необходимо в качестве параметров указать пути к входному и выходному файлам.
// ============================================================= // Листинг 19. Копирование файлов, расположенных на файл-сервере // Файл fcopy\fcopy.cpp // // (C) A. Frolov, 1993 // =============================================================
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <fcntl.h> #include <io.h> #include <sys\stat.h>
extern "C" int GetNetWareShellVersion(char *,char *, char *); extern "C" int FileServerFileCopy(int, int, long, long, long, long*);
void main(int argc, char *argv[]) {
char MajorVersion=0; char MinorVersion=0; char Revision=0;
int FromHandle; int ToHandle; long BytesCopied; int ccode;
printf("\n*FCOPY* (C) Frolov A., 1993\n");
// Проверяем наличие сетевой оболочки
asm push si GetNetWareShellVersion(&MajorVersion, &MinorVersion, &Revision); asm pop si
if(MajorVersion == 0) { printf("\nОболочка NetWare не загружена\n"); return; }
// Необходимо задать путь к каталогу, удаляемые // и добавляемые права доступа
if(argc < 3) { printf("Укажите пути к копируемым файлам, " "\nнапример: fcopy f:\users\my.dat f:\us\my.dat"); return; } // Параметры должны быть заданы заглавными буквами
strupr(argv[1]); strupr(argv[2]);
// Открываем входной файл в двоичном режиме для чтения
if ((FromHandle = open(argv[1], O_RDONLY | O_BINARY)) == -1) { printf("Не могу открыть исходный файл\n"); return; }
// Открываем выходной файл в двоичном режиме для чтения // и записи, разрешаем создание файла, если его еще нет, // разрешаем запись в файл
if ((ToHandle = open(argv[2], O_CREAT | O_RDWR | O_BINARY, S_IWRITE)) == -1) { printf("Не могу открыть выходной файл\n"); return; }
// Копируем файл, длину файла определяем при помощи // функции filelength()
ccode = FileServerFileCopy(FromHandle, ToHandle, 0, 0, filelength(FromHandle), &BytesCopied);
if(!ccode) printf("Файл скопирован\n"); else printf("Ошибка %02.2X\n", ccode);
// Закрываем файлы
close(FromHandle); close(ToHandle); }