Копирование файлов с использованием Windows

Копирование файлов с использованием Windows

В программе 1.2 решается та же задача копирования файлов, но делается это с помощью Windows API, а базовые приемы, стиль и соглашения, иллюстрируемые этой программой, будут использоваться на протяжении всей этой книги.

Программа 1.2. cpW: копирование файлов с использованием Windows, первая реализация 

/* Глава 1. Базовая программа копирования файлов cp. Реализация, использующая Windows. */

/* cpW файл1 файл2: Копировать файл1 в файл2. */

#include <windows.h>

#include <stdio.h>

#define BUF_SIZE 256

int main (int argc, LPTSTR argv []) {

 HANDLE hIn, hOut;

 DWORD nIn, nOut;

 CHAR Buffer [BUF_SIZE];

 if (argc != 3) {

  printf ("Использование: cpW файл1 файл2 ");

  return 1;

 }

 hIn = CreateFile(argv [1], GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);

 if (hIn == INVALID_HANDLE_VALUE) {

  printf("Невозможно открыть входной файл. Ошибка: %х ", GetLastError());

  return 2;

 }

 hOut = CreateFile(argv[2], GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

 if (hOut == INVALID_HANDLE_VALUE) {

  printf("Невозможно открыть выходной файл. Ошибка: %x ", GetLastError()); 

  return 3;

 }

 while (ReadFile(hIn, Buffer, BUF_SIZE, &nIn, NULL) && nIn > 0) {

  WriteFile(hOut, Buffer, nIn, &nOut, NULL);

  if (nIn != nOut) {

   printf ("Неустранимая ошибка записи: %x ", GetLastError());

   return 4;

  }

 }

 CloseHandle(hIn);

 CloseHandle(hOut);

 return 0;

}

Этот простой пример иллюстрирует некоторые особенности программирования в среде Windows, к подробному рассмотрению которых мы приступим в главе 2.

1. В программу всегда включается файл <windows.h>, в котором содержатся все необходимые определения функций и типов данных Windows.[10]

2. Все объекты Windows идентифицируются переменными типа Handle, причем для большинства объектов можно использовать одну и ту же общую функцию CloseHandle.

3. Рекомендуется закрывать все ранее открытые дескрипторы, если в необходимость в них отпала, чтобы освободить ресурсы. В то же время, при завершении процессов относящиеся к ним дескрипторы автоматически закрываются ОС, и если не остается ни одного дескриптора, ссылающегося на какой-либо объект, то ОС уничтожает этот объект и освобождает соответствующие ресурсы. (Примечание. Как правило, файлы подобным способом не уничтожаются.)

4. Windows определяет многочисленные символические константы и флаги. Обычно они имеют длинные имена, нередко поясняющие назначение данного объекта. В качестве типичного примера можно привести имена INVALID_HANDLE_VALUE и GENERIC_READ.

5. Функции ReadFile и WriteFile возвращают булевские значения, а не количества обработанных байтов, для передачи которых используются аргументы функций. Это определенным образом изменяет логику организации работы циклов.[11] Нулевое значение счетчика байтов указывает на попытку чтения метки конца файла и не считается ошибкой.

6. Функция GetLastError позволяет получать в любой точке программы коды системных ошибок, представляемые значениями типа DWORD. В программе 1.2 показано, как организовать вывод генерируемых Windows текстовых сообщений об ошибках.

7. Windows NT обладает более мощной системой защиты файлов, описанной в главе 15. В данном примере защита выходного файла не обеспечивается.

8. Такие функции, как CreateFile, обладают богатым набором дополнительных параметров, но в данном примере использованы значения по умолчанию.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Копирование звуковых файлов

Из книги Nero 8 автора Кашеваров А

Копирование звуковых файлов 1. Вставьте в привод компакт-диск, который хотите скопировать, и запустите программу Nero StartSmart.2. Перейдите на вкладку Rip and Burn (Перенос и запись).3. Щелкните кнопкой мыши на задании Rip Audio CD (Перенос аудио-CD). Откроется окно приложения Nero Burning ROM с


Копирование файлов системы

Из книги Новейший самоучитель работы на компьютере автора Белунцов Валерий

Копирование файлов системы Итак, набор дополнительных программ и компонентов системы для установки выбран. Теперь наступает самая приятная часть установки системы, во время которой вообще ничего делать не надо. Нужно только подождать некоторое время, пока все файлы,


Поиск файлов с использованием регyлярных выражений

Из книги Windows Script Host для Windows 2000/XP автора Попов Андрей Владимирович

Поиск файлов с использованием регyлярных выражений Всем хорошо известно, что для поиска файлов и папок с помощью стандартных средств Windows в именах можно использовать подстановочные символы "?" (обозначает любой один символ) и "*" (обозначает любое число любых символов).


Копирование файлов с использованием стандартной библиотеки С

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Копирование файлов с использованием стандартной библиотеки С Как видно из текста программы 1.1, стандартная библиотека С поддерживает объекты потоков ввода/вывода FILE, которые напоминают, несмотря на меньшую общность, объекты Windows HANDLE, представленные в программе


Копирование файлов с использованием вспомогательной функции Windows

Из книги Сетевые средства Linux автора Смит Родерик В.

Копирование файлов с использованием вспомогательной функции Windows Для повышения удобства работы в Windows предусмотрено множество вспомогательных функций (convenience functions), которые, объединяя в себе несколько других функций, обеспечивают выполнение часто встречающихся задач


Пример: последовательная обработка файлов с использованием метода отображения

Из книги Недокументированные и малоизвестные возможности Windows XP автора Клименко Роман Александрович

Пример: последовательная обработка файлов с использованием метода отображения Программа atou (программа 2.4) иллюстрирует последовательную обработку файлов на примере преобразования ASCII-файлов к кодировке Unicode, приводящего к удвоению размера файла. Этот случай является


Копирование файлов

Из книги Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/FireBird/Yaffil автора Ковязин Алексей Николаевич

Копирование файлов Пять различных вариантов реализации программ копирования файлов использовались для копирования файла размером 25,6 Мбайт (400 000 записей размером 64 байта каждая, сгенерированных с помощью программы RandFile из главы 5). В первых двух столбцах табл. В.1


Копирование файлов сервера

Из книги Самоучитель работы на компьютере: быстро, легко, эффективно автора Гладкий Алексей Анатольевич

Копирование файлов сервера Сформировав поддерево chroot, надо скопировать в содержащиеся в нем каталоги требуемые файлы. Набор необходимых файлов зависит от особенностей сервера. Если сервер самостоятельно вызывает функцию chroot(), вам нет необходимости размещать в


Копирование системных файлов

Из книги Виртуальная библиотека Delphi автора

Копирование системных файлов После того как вы разместите в пределах поддерева chroot файлы сервера, вам следует скопировать в каталоги поддерева некоторые системные файлы. Для работы серверов часто требуются следующие типы файлов.• Библиотеки. Во время работы многие


12.2 Копирование, перемещение и удаление файлов

Из книги автора

12.2 Копирование, перемещение и удаление файлов Хоть я и обещал не объяснять основы использования компьютера, позволю вам напомнить несколько полезных сочетаний клавиш, используемых для управления файлами и папками:• Ctrl—C — копировать выделенные объекты в буфер


Копирование файлов

Из книги автора

Копирование файлов Копирование в INF-файлах реализовано наиболее сложно. Для его выполнения необходимо не только использовать ключевое слово CopyFiles, но и, кроме того, создать три отдельных блока INF-файла: DestinationDirs, SourceDisksFiles и SourceDisksNames. Рассмотрим простой пример. Листинг 15.7.


Копирование файлов

Из книги автора

Копирование файлов Как описано ниже в главе "Состав модулей InterBase", минимальный корректный клиент InterBase состоит из трех файлов - gds32.dll, interbase.msg и msvcrt.dll.Опытные специалисты могут заявить, что абсолютный минимум - это библиотека gds32.dll, которую можно положить в тот же каталог, в


Копирование файлов сервера

Из книги автора

Копирование файлов сервера Здесь приведен пример для установки InterBase архитектуры SuperServer, как наиболее распространенный случай. При установке сервера копируются файлы, список которых и место назначения приведены в табл. 4.2.Табл 4.2. Файлы для установки