Копирование файлов с использованием 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, обладают богатым набором дополнительных параметров, но в данном примере использованы значения по умолчанию.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Копирование файлов с использованием стандартной библиотеки С
Копирование файлов с использованием стандартной библиотеки С Как видно из текста программы 1.1, стандартная библиотека С поддерживает объекты потоков ввода/вывода FILE, которые напоминают, несмотря на меньшую общность, объекты Windows HANDLE, представленные в программе
Копирование файлов с использованием вспомогательной функции Windows
Копирование файлов с использованием вспомогательной функции Windows Для повышения удобства работы в Windows предусмотрено множество вспомогательных функций (convenience functions), которые, объединяя в себе несколько других функций, обеспечивают выполнение часто встречающихся задач
Пример: последовательная обработка файлов с использованием метода отображения
Пример: последовательная обработка файлов с использованием метода отображения Программа atou (программа 2.4) иллюстрирует последовательную обработку файлов на примере преобразования ASCII-файлов к кодировке Unicode, приводящего к удвоению размера файла. Этот случай является
Копирование файлов
Копирование файлов Пять различных вариантов реализации программ копирования файлов использовались для копирования файла размером 25,6 Мбайт (400 000 записей размером 64 байта каждая, сгенерированных с помощью программы RandFile из главы 5). В первых двух столбцах табл. В.1
Поиск файлов с использованием регyлярных выражений
Поиск файлов с использованием регyлярных выражений Всем хорошо известно, что для поиска файлов и папок с помощью стандартных средств Windows в именах можно использовать подстановочные символы "?" (обозначает любой один символ) и "*" (обозначает любое число любых символов).
Копирование файлов сервера
Копирование файлов сервера Сформировав поддерево chroot, надо скопировать в содержащиеся в нем каталоги требуемые файлы. Набор необходимых файлов зависит от особенностей сервера. Если сервер самостоятельно вызывает функцию chroot(), вам нет необходимости размещать в
Копирование системных файлов
Копирование системных файлов После того как вы разместите в пределах поддерева 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. Файлы для установки
Копирование звуковых файлов
Копирование звуковых файлов 1. Вставьте в привод компакт-диск, который хотите скопировать, и запустите программу Nero StartSmart.2. Перейдите на вкладку Rip and Burn (Перенос и запись).3. Щелкните кнопкой мыши на задании Rip Audio CD (Перенос аудио-CD). Откроется окно приложения Nero Burning ROM с
Копирование файлов системы
Копирование файлов системы Итак, набор дополнительных программ и компонентов системы для установки выбран. Теперь наступает самая приятная часть установки системы, во время которой вообще ничего делать не надо. Нужно только подождать некоторое время, пока все файлы,