Программирование для Windows NT (том 2)


Функция StartConversion - часть 2


Oem2Char(hSrcFile);

CloseHandle(hSrcFile);

Функция Oem2Char выполняет перекодировку файла “по месту”. Далее идентификатор исходного файла закрывается функцией CloseHandle, после чего функция StartConversion возвращает управление.

В синхронном и асинхронном режиме функция StartConversion после открывания исходного файла дополнительно открывает выходной файл, в который будет записан результат перекодировки. Для выбора выходного файла вызывается функция GetSaveFileName.

Так же как и исходный файл, выходной файл открывается при помощи функции CreateFile, причем в синхронном и асинхронном режиме этот файл открывается по-разному:

#if FILEOP == SYNCHRONOUS_IO

  hDstFile = CreateFile(ofn.lpstrFile, GENERIC_WRITE,

    0, NULL, CREATE_ALWAYS,

    FILE_FLAG_SEQUENTIAL_SCAN, NULL);

 

#elif FILEOP == ASYNCHRONOUS_IO

  hDstFile = CreateFile(ofn.lpstrFile, GENERIC_WRITE,

    0, NULL, CREATE_ALWAYS,

    FILE_FLAG_OVERLAPPED,  NULL);

#endif

В синхронном режиме мы указываем режим доступа на запись GENERIC_WRITE и флаг FILE_FLAG_SEQUENTIAL_SCAN (так как запись в выходной файл будет выполняться последовательно от начала до конца).

В асинхронном режиме необходимо указать флаг FILE_FLAG_OVERLAPPED.

Кроме того, в обоих случаях мы указали режим открывания файла CREATE_ALWAYS. В результате выходной файл будет создан заново даже в том случае, если в выбранном каталоге уже есть файл с таким именем. При этом содержимое старого файла будет уничтожено.

После открывания исходного и выходного файла вызывается функция Oem2Char, выполняющая перекодировку, а затем оба файла закрываются при помощи функции CloseHandle:

Oem2Char(hSrcFile, hDstFile);

CloseHandle(hSrcFile);

CloseHandle(hDstFile);

Обратите внимание, что в синхронном и асинхронном режиме работы с файлами в нашем приложении используется другой вариант фукнции Oem2Char - вариант с двумя параметрами. Как вы сейчас увидите, в нашем приложении используются три варианта этой функции.




- Начало -  - Назад -  - Вперед -