Следующий пример копирует один файл в другой. При этом во втором файле все символы верхнего регистра.
Приложение открывает файл ORIGINAL.TXT при помощи функции CreateFile. Затем, при помощи функции GetTempFileName приложение генерирует имя временного файла и используя CreateFile создаёт временный файл. Далее происходит считывание в буфер блоками по 4K, преобразование символов к верхнему регистру, и записывание преобразованного буфера во временный файл. Когда весь ORIGINAL.TXT будет записан во временный файл, то программа закрывает оба файла и переименовывает временный файл в ALLCAPS.TXT при помощи функции MoveFile.HANDLE hFile; HANDLE hTempFile; DWORD dwBytesRead, dwBytesWritten, dwPos; char szTempName[MAX_PATH]; char buffer[4096]; // Открываем существующий файл. hFile = CreateFile("ORIGINAL.TXT", // имя файла GENERIC_READ, // открываем для чтения 0, // монопольно NULL, // без защиты OPEN_EXISTING, // только существующий файл FILE_ATTRIBUTE_NORMAL, // нормальный файл NULL); // без атрибутов if (hFile == INVALID_HANDLE_VALUE) { ErrorHandler("Could not open file."); // ошибка } // Создаём временный файл. GetTempFileName("\\TEMP", // директория для временных файлов "NEW", // префикс для имени файла 0, // создать уникальное имя szTempName); // буфер для имени
hTempFile = CreateFile((LPTSTR) szTempName, // имя файла GENERIC_READ | GENERIC_WRITE, // открываем для чтения/записи 0, // монопольно NULL, // без защиты CREATE_ALWAYS, // переписать существующий файл FILE_ATTRIBUTE_NORMAL, // нормальный файл NULL); // без атрибутов
if (hTempFile == INVALID_HANDLE_VALUE) { ErrorHandler("Could not create temporary file."); } // Читаем в буфер блоками по 4K. // Меняем все символы в буфере на верхний регистр. // Записываем буфер во временный файл.
do { if (ReadFile(hFile, buffer, 4096, &dwBytesRead, NULL)) { CharUpperBuff(buffer, dwBytesRead); WriteFile(hTempFile, buffer, dwBytesRead, &dwBytesWritten, NULL); } } while (dwBytesRead == 4096); // Закрываем оба файла. CloseHandle(hFile); CloseHandle(hTempFile); // Перемещаем временный файл в новый текстовый файл. if (!MoveFile(szTempName, "ALLCAPS.TXT")) { ErrorHandler("Could not move temp. file."); } |