Функция Oem2Char выполняет перекодировку файла
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 - вариант с двумя параметрами. Как вы сейчас увидите, в нашем приложении используются три варианта этой функции.
Содержание Назад Вперед