Приложения могут получать уникальные имена для временных файлов, используя функцию GetTempFileName. Функция же GetTempPath извлекает путь к каталогу, где будут создаваться временные файлы.
В примере ниже первый файл копируется в другой. Конечный файл - версия первого файла буквами верхнего регистра.
Приложение открывает файл Original.txt, используя функцию CreateFile. Затем программа при помощи функции GetTempFileName выбирает имя временного файла и использует CreateFile, чтобы создать его. Приложение читает 4-х килобайтные блоки в буфер, преобразует содержание буфера в прописные буквы и пишет преобразованный буфер во временный файл. Когда весь Original.txt запишется во временном файле, программа закрывает оба файла и переименовывает временный файл в Allcaps.txt, используя функцию MoveFile.
#include <windows.h>
#include <stdio.h>
#define BUFSIZE 4096
int main()
{
HANDLE hFile;
HANDLE hTempFile;
DWORD dwBytesRead, dwBytesWritten, dwBufSize=BUFSIZE;
char szTempName[MAX_PATH];
char buffer[BUFSIZE];
char lpPathBuffer[BUFSIZE];
// Откроем существующий файл.
hFile = CreateFile("original.txt", // имя файла
GENERIC_READ, // открыт для чтения
0, // совместного использования нет
NULL, // защита по умолчанию
OPEN_EXISTING, // только существующий файл
FILE_ATTRIBUTE_NORMAL, // атрибуты обычного файла
NULL); // шаблона атрибутов нет
if (hFile == INVALID_HANDLE_VALUE)
{
printf("Could not open file.");
return 0;
}
// Получим временный путь
GetTempPath(dwBufSize, // длина буфера
lpPathBuffer); // буфер для пути
// Создадим временный файл.
GetTempFileName(lpPathBuffer, // каталог для временных файлов
"NEW", // префикс имени временного файла
0, // создаем уникальное имя
szTempName); // буфер для имени
hTempFile = CreateFile((LPTSTR) szTempName, // имя файла
GENERIC_READ | GENERIC_WRITE, // открыт для чтения и записи
0, // совместного использования нет
NULL, // защита по умолчанию
CREATE_ALWAYS, // переписывать существующий файл
FILE_ATTRIBUTE_NORMAL, // атрибуты обычного файла
NULL); // шаблона атрибутов нет
if (hTempFile == INVALID_HANDLE_VALUE)
{
printf("Could not create temporary file.");
return 0;
}
// Читаем в буфер 4-х килобайтными блоками.
// Изменяем все символы в буфере на прописные.
// Записываем буфер во временный файл.
do
{
if (ReadFile(hFile, buffer, 4096,
&dwBytesRead, NULL))
{
CharUpperBuff(buffer, dwBytesRead);
WriteFile(hTempFile, buffer, dwBytesRead,
&dwBytesWritten, NULL);
}
} while (dwBytesRead == BUFSIZE);
// Закрываем оба файла.
CloseHandle(hFile);
CloseHandle(hTempFile);
// Перемещаем временный файл в новый текстовый файл.
if (!MoveFileEx(szTempName, "allcaps.txt", MOVEFILE_REPLACE_EXISTING))
{
printf("Could not move temp file.");
return 0;
}
}
|