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


Функция StartConversion


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

Для выбора файла мы использовали функцию GetOpenFileName, хорошо знакомую вам по предыдущим томам “Библиотеки системного программиста”, посвященным программированию для операционной системы Microsoft Windows версии 3.1.

Выбранные файлы открываются при помощи функции CreateFile. Однако способ открывания зависит от режима работы с файлами. Ниже мы привели фрагмент исходного текста приложения, в котором открывается исходный файл:

#if FILEOP == SYNCHRONOUS_IO

  hSrcFile = CreateFile(ofn.lpstrFile, GENERIC_READ,

    FILE_SHARE_READ, NULL, OPEN_EXISTING,

    FILE_FLAG_SEQUENTIAL_SCAN, NULL);

#elif FILEOP == ASYNCHRONOUS_IO

  hSrcFile = CreateFile(ofn.lpstrFile, GENERIC_READ,

    FILE_SHARE_READ, NULL, OPEN_EXISTING,

    FILE_FLAG_OVERLAPPED, NULL);

 

#elif FILEOP == MEMORYMAPPED_IO

  hSrcFile = CreateFile(ofn.lpstrFile,

    GENERIC_READ | GENERIC_WRITE,

    0, NULL, OPEN_EXISTING,  0, NULL);

#endif

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

В асинхронном режиме необходимо указывать флаг FILE_FLAG_OVERLAPPED, что мы и сделали в нашем примере.

Что же касается режима отображения файла на память, то сдесь при открывании файла мы указали режимы GENERIC_READ и GENERIC_WRITE. В результате файл открывается и для чтения, и для записи.

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




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