Приложения могут получать уникальные имена для временных файлов, используя функцию 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; } } |