Создание и использование временного файла

Следующий пример копирует один файл в другой. При этом во втором файле все символы верхнего регистра. Приложение открывает файл 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.");

}

 
« Предыдущая статья   Следующая статья »