В качестве примера приведем исходный текст приложения OEM2ANSI, выполняющего перекодировку файла из набора OEM в набор ANSI. На примере этого приложения вы узнаете о стандартных средствах Windows, позволяющих выполнять поиск файлов в каталогах и сохранение файлов под заданным именем и в заданном каталоге. Кроме этого вы узнаете о существовании в программном интерфейсе Windows специальных функций, предназначенных для работы с файлами.
Исходный текст основного файла приложения OEM2ANSI представлен в листинге 5.5.
Листинг 5.5. Файл oem2ansi\oem2ansi.cpp
// ---------------------------------------- // Перекодировка текстового файла // из OEM в ANSI // ----------------------------------------
#define STRICT #include <windows.h> #include <commdlg.h> #include <mem.h>
// Прототипы функций HFILE GetSrcFile(void); HFILE GetDstFile(void); void Oem2Ansi(HFILE, HFILE);
// ------------------------------- // Функция WinMain // -------------------------------
#pragma argsused int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { // Переменные для хранения // идентификаторов входного и выходного // файлов HFILE hfSrc, hfDst;
// Открываем входной файл. // В случае ошибки или отказа от выбора // файла завершаем работу приложения hfSrc = GetSrcFile(); if(!hfSrc) return 0;
// Открываем выходной файл hfDst = GetDstFile(); if(!hfDst) return 0;
// Выполняем перекодировку файла Oem2Ansi(hfSrc, hfDst);
// Закрываем входной и выходной файлы _lclose(hfSrc); _lclose(hfDst);
return 0; }
// ------------------------------- // Функция GetSrcFile // Выбор файла для перекодировки // -------------------------------
HFILE GetSrcFile(void) { // Структура для выбора файла OPENFILENAME ofn;
// Буфер для записи пути к выбранному файлу char szFile[256];
// Буфер для записи имени выбранного файла char szFileTitle[256];
// Фильтр расширений имени файлов char szFilter[256] = "Text Files\0*.txt;*.doc\0Any Files\0*.*\0";
// Идентификатор открываемого файла HFILE hf;