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


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

Назад в оглавление темы
На главную страницу темы

Hosted by uCoz