}
else
return FALSE;
}
else
return FALSE;
// Если исходный файл открыть не удалось,
// возвращаем значение FALSE
if(hSrcFile == INVALID_HANDLE_VALUE)
return FALSE;
#if FILEOP == MEMORYMAPPED_IO
// В том случае, когда используется отображение
// файла на память, этот файл перекодируется
// "по месту". Для этого используется функция
// Oem2Char с одним параметром.
Oem2Char(hSrcFile);
CloseHandle(hSrcFile);
#elif FILEOP == SYNCHRONOUS_IO FILEOP == ASYNCHRONOUS_IO
// При использовании синхронного или асинхронного
// режима работы с файлами результат перекодировки
// будет записан в новый файл. Поэтому в этом
// случае мы открываем второй файл и используем
// другой вариант функции Oem2Char - с двумя
// параметрами
ofn.lpstrTitle = szDlgTitleSave;
ofn.Flags = OFN_HIDEREADONLY;
if(GetSaveFileName(&ofn))
{
// Если файл выбран, открываем его
if (*ofn.lpstrFile)
{
#if FILEOP == SYNCHRONOUS_IO
// При использовании синхронных операций указываем
// флаг FILE_FLAG_SEQUENTIAL_SCAN
hDstFile = CreateFile(ofn.lpstrFile, GENERIC_WRITE,
0, NULL, CREATE_ALWAYS,
FILE_FLAG_SEQUENTIAL_SCAN, NULL);
#elif FILEOP == ASYNCHRONOUS_IO
// При использовании асинхронных операций
// необходимо указать флаг FILE_FLAG_OVERLAPPED
hDstFile = CreateFile(ofn.lpstrFile, GENERIC_WRITE,
0, NULL, CREATE_ALWAYS,
FILE_FLAG_OVERLAPPED, NULL);
#endif
}
else
return FALSE;
}
else
return FALSE;
// Если выходной файл открыть не удалось,
// возвращаем значение FALSE
if(hDstFile == INVALID_HANDLE_VALUE)
return FALSE;
// Выполняем перекодировку файла hSrcFile с записью
// результата перекодировки в файл hDstFile
Oem2Char(hSrcFile, hDstFile);
// После перекодировки закрываем оба файла