C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Как добавить один файл к другому / Файлы, папки, диски / Файловая система

Как добавить один файл к другому.

Следующий пример добавлет один файл в конец другого. Приложение открывает два файла функцией CreateFile: ONE.TXT открывается для чтения, а TWO.TXT - для записи. Затем, содержимое ONE.TXT добавляется в конец TWO.TXT путём чтения и записи блоками по 4K при помощи функций ReadFile и WriteFile. Перед записью во второй файл, приложение устанавливает указатель в файле на конец функцией SetFilePointer и блокирует область, которая будет записана функцией LockFile. Тем самым другим процессам будет закрыт доступ во время записи. После каждой операции записи, функцией UnlockFile область разблокируется.

 

HANDLE hFile;
HANDLE hAppend;
DWORD  dwBytesRead, dwBytesWritten, dwPos;
char   buff[4096];

// Открываем существующий файл.

hFile = CreateFile("ONE.TXT",     // открываем ONE.TXT
    GENERIC_READ,                 // открываем на чтение
    0,                            // не доступен для других
    NULL,                         // нет security
    OPEN_EXISTING,                // только существующий файл
    FILE_ATTRIBUTE_NORMAL,        // нормальный файл
    NULL);                        // нет шаблона аттрибутов

if (hFile == INVALID_HANDLE_VALUE)
{
    ErrorHandler("Could not open ONE.");  // обрабатываем ошибку
}
 
// Открываем существующий файл, либо если файл не существует,
// то создаём новый.

hAppend = CreateFile("TWO.TXT",   // открываем TWO.TXT
    GENERIC_WRITE,                // открываем на запись
    0,                            // не доступен для других
    NULL,                         // нет security
    OPEN_ALWAYS,                  // открыть или создать
    FILE_ATTRIBUTE_NORMAL,        // нормальный файл
    NULL);                        // нет шаблона аттрибутов

if (hAppend == INVALID_HANDLE_VALUE)
{
    ErrorHandler("Could not open TWO.");    // обрабатываем ошибку
}

// Добавляем первый файл в конец второго.
// Блокируем второй файл во время записи в него, чтобы другие
// процессы в это время ничего не смогли сделать с файлом. Когда
// запись завершена, то разблокируем файл.

do
{
    if (ReadFile(hFile, buff, 4096, &dwBytesRead, NULL))
    {
        dwPos = SetFilePointer(hAppend, 0, NULL, FILE_END);
        LockFile(hAppend, dwPos, 0, dwPos + dwBytesRead, 0);
        WriteFile(hAppend, buff, dwBytesRead,
            &dwBytesWritten, NULL);
        UnlockFile(hAppend, dwPos, 0, dwPos + dwBytesRead, 0);
    }
} while (dwBytesRead == 4096);
 
// Закрываем оба файла.

CloseHandle(hFile);
CloseHandle(hAppend);