15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту




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

Следующий пример копирует один файл в другой. При этом во втором файле все символы верхнего регистра.

Приложение открывает файл 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.");

}