Пример использования метода Seek()



CFile file; //создали объект класса CFile

...// открытие файла и т.д.

LONG len = 1000;

file.Seek(len, CFile::begin );

 

Чтобы переместить указатель в начало или конец файла, наиболее удобно использовать специальные методы. Метод SeekToBegin() перемещает указатель в начало файла, а метод SeekToEnd() - в его конец. Примеры их использования:

file.SeekToBegin();

file.SeekToEnd();

В состав класса CFile также входят методы, позволяющие установить и изменить длину файла, - GetLength(), SetLength().

Методы определения характеристик открытого файла:

GetFilePath() – метод возвращает объект класса CString, в котором содержится полный путь файла, включая имя диска, каталоги, имя файла и его расширение;

GetFileName() - возвращает объект класса CString, в котором находится имя файла с расширением;

GetFileTitle() – возвращает объект класса CString, в котором находится имя файла без расширения.

Открытие файлов с помощью класса CFileDialog.

     Этот класс позволяет осуществлять открытие и запись в файл с помощью специальных диалогов, широко используемых в большинстве программных продуктов.

     Описание параметров, задаваемых при использовании объектов класса CFileDialog:

 

CFileDialog (BOOL Dlg, LPCTSTR DefExt=NULL, LPCTSTR FileName = NULL, DWORD Flags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR Filter = NULL);

 

Параметры:

DlgTRUE, чтобы сконструировать диалог открытия файла, или FALSE для конструирования диалога сохранения файлов («Сохранить как»).

DefExt – Расширение файла по умолчанию. Если этот параметр принимает значение NULL, то никакого расширения не будет добавлено автоматически.

FileName – Начальное имя файла, которое будет помещено в поле набора имени файла. Если этот параметр имеет значение NULL, то изначально никакого имени файла появляться в этом поле не будет.

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

Filter – Серия пар строк, которые определяют фильтры для выбора файлов, отображаемых в диалоге.

     Данный класс использован в примере выполнения данной лабораторной работы.

Пример выполнения.

Задание: разработать программу, которая:

1) осуществляет работу с таблицей:

§ открывает файл, содержащий таблицу, которая имеет следующую структуру: 4 столбца по 10 символов каждый, далее следует переход на следующую строку (следовательно, в структуре переменных необходимо зарезервировать поле для считывания двух символов /r/n перехода новую строку);

· считывает из него первую строку таблицы;

· изменяет содержимое первого поля считанной строки на символы 1234567890;

· записывает обновленную строку в начало открытого файла (на ее исходное место, но с новым содержимым первого поля);

2) осуществляет работу с переменными, введенными пользователем:

· считывает из трех полей диалога целое, вещественное числа и строку символов;

· записывает эти данные в файл out.txt с помощью функции fprintf().

 

1. В среде Microsoft Developer Studio (Visual C++)создаем проект на основе диалога с названием labwork3. Для этого в пункте меню New выбираем подпункт Project Workspace (рис. 1). 

 

Рисунок 1 – Пункт меню New

  Далее выполняем действия по созданию проекта на основе диалога, как показано на рисунках 2-3.

Рисунок 2 – Выбор типа нового проекта, задание его имени и пути

(для продолжения нажать кнопку Create)

 

Рисунок 3 – Выбор типа приложения на основе диалога

(для продолжения нажать на кнопку Finish)

     После выполнения указанных действий в проекте автоматически будут созданы файлы по заданному пути (списки ресурсов (а) и файлов (б) проекта изображены на рисунке 4).

 

а)                                                                               б)

Рисунок 4 – Созданные ресурсы (а) и файлы (б) проекта

 

2. Для корректной работы приложения необходимо изменить язык созданных диалогов на русский. Для этого нужно открыть папку Dialog во вкладке ресурсов проекта (рисунок 4а), выделить ресурс диалога и в меню, вызываемом нажатием правой кнопкой мыши, выбрать пункт Properties, поменять язык ресурса на русский (рисунок 5).

     Повторить данный шаг для всех диалогов.

Рисунок 5 – Изменение языка ресурса

3. На диалоге проекта IDD_LABWORK3_DIALOG, который будет открываться при запуске приложения, размещаем необходимые в проекте элементы диалога с помощью панели инструментов (рисунок 6).

Рисунок 6 – Панель инструментов для конструирования диалога

 

  Согласно заданию на поле диалога необходимо разместить:

§ для пункта (1): два элемента EDIT BOX для вывода строки таблицы, считанной из файла, и строки после модификации первого поля, кнопку для работы с файлом, где содержится таблица;

§ для пункта (2): три элемента EDIT BOX для ввода пользователем значений переменных (целое, вещественное числа и строка символов) для записи в файл, кнопка для осуществления записи в файл;

§ кнопка для выхода из программы.

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

 

Рисунок 7 – Диалог проекта

 

4. Для каждого элемента диалога автоматически будет установлен уникальный идентификатор (ID), который можно узнать дважды нажав левой кнопкой мыши по соответствующему элементу диалога. Надпись на кнопках можно изменить в поле Caption в окне свойств элемента (рисунки 8,9).

Рисунок 8 – Окно свойств элемента диалога EDIT BOX

 

 

Рисунок 9 – Окно свойств кнопки

 

  Для возможности размещения текста в элементах диалога EDIT BOX в несколько строк (для полей работы с таблицей), устанавливаем в каждом из них стили, указанные на рисунке 10:

Рисунок 10 – Стили элементов EDIT BOX

 

5. Создаем заголовки функций работы с кнопками “Работа с таблицей” и “Работа с переменными”. Для этого открываем диалог ClassWizard по правой кнопке мыши при нажатии на кнопку диалога проекта или сочетанием клавиш CTRL+W. Во вкладке Message Maps находим уникальные идентификаторы кнопок диалога проекта и дважды нажимаем левой клавишей мыши по сообщению BN_CLICKED, которое отвечает за одинарное нажатие на кнопку диалога с идентификатором IDC_BUTTON1 (рисунок 11). В появившемся новом окне будет показано имя функции, которая будет выполняться при нажатии на эту кнопку диалога, согласитесь с предложенным именем, нажав кнопку ОК.

Рисунок 11 – Объявление функций

Повторите данную процедуру для всех кнопок диалога проекта.

6. Определяем переменные для элементов EDIT BOX во второй вкладке окна ClassWizard (рисунок 12). Дважды нажав на уникальный идентификатор в появившемся окне необходимо обозначить переменную, в которой будем сохранять содержимое соответствующего EDIT BOX, и тип данных. Повторите этот шаг для всех элементов EDIT BOX.

Рисунок 12 – Определение переменных для элементов диалога

 

7. Возвращаемся на первую вкладку окна ClassWizard для разработки текста функций, вызываемых при одинарном нажатии кнопок диалога проекта. Для этого (рисунок 12) необходимо дважды нажать левой клавишей мыши на название функции, в данном случае OnButton1.

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

void CLabwork3Dlg::OnButton1()

{

 // TODO: Add your control notification handler code here = добавьте здесь свой код

}

 

Рисунок 13 – Открытие тела функции

 

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

 

void CLabwork3Dlg::OnButton1()

{ // TODO: Add your control notification handler code here

char Filter []= "TextFile (*.txt),(*.doc) | *.txt; *.doc | All (*.*) | *.*||";

  //определили фильтр для открытия файлов

CFileDialog fd(TRUE, ".txt", "ReadMe", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, Filter);

// объявили о создании объекта класса CFileDialog для открытия файла

fd.DoModal();

// инициализировали вызов диалога открытия файла

 

struct

{ char s1[10];

char s2[10];

char s3[10];

char s4[10];

char rn[2]; // для считывания символов перехода на новую строку

} str;

//объявили структуру таблицы в файле согласно заданию и соответствующий //объект str

CFile txt( fd.GetPathName(), CFile::modeReadWrite );

// открыли файл, выбранный пользователем, на чтение и запись

txt.SeekToBegin(); // переместились на начало файла

 

UINT z = sizeof(str); // определили длину строки таблицы в файле

 

txt.Seek(1*sizeof(str), CFile::begin);

// для примера перемещение по файлу от начала на одну строку таблицы вперед

txt.Seek(-1*sizeof(str), CFile::current);

// аналогично – от текущей позиции на одну строку таблицы назад

 

txt.Read(&str, sizeof(str));

// считывание из файла в переменную str одной строки таблицы из файла

m_1.Format("%.10s %.10s %.10s %.10s", str.s1, str.s2, str.s3, str.s4);

// ВЫВОД СТРОКИ ТАБЛИЦЫ В EDIT_BOX (после точки - длина строки)

memcpy(str.s1, "0123456789", 10);

// помещаем в первое поле переменной str строку из цифр

txt.Seek(-1*sizeof(str), CFile::current);

// перемещение по файлу от текущей позиции на одну строку таблицы назад

txt.Write(&str, sizeof(str));

m_2.Format("%.10s %.10s %.10s %.10s %.2s \r\n новая строка!!", str.s1, str.s2, str.s3, str.s4, str.rn);

// ВЫВОД СТРОКИ ТАБЛИЦЫ В EDIT_BOX (после точки - длина строки)

// +пример переноса строки

UpdateData(0); // выводим строки в диалог

txt.Close(); // закрываем файл

}

 

Аналогично разрабатываем функцию для работы с переменными:

void CLabwork3Dlg::OnButton2()

{FILE* file = NULL; //объявили указатель на структуру FILE

 

file = fopen("out.txt\0", "w"); //открыли файл out.txt на запись

if (file == NULL) //если файл не может быть открыт на запись, т.е. указатель будет равен NULL значению

{ MessageBox("ошибка открытия файла!"); //то выведем такое сообщение в специальном окне

  return; //выход из функции

};

m_3=0; // присвоили начальные значения переменным, закрепленным за элементами диалога

m_4=0.0;

m_5 = "ничего не введено";

UpdateData(1);// присвоили переменным m_3, m_4 и m_5 значения, введенные пользователем в элементы диалога

 

fprintf(file, "%i ", m_3);//запись в файл, формат записи аналогичен выводу информации на экран

fprintf(file, "%.4f ", m_4);//с помощью оператора printf()

fprintf(file, "%s ", m_5);

 

fclose(file);//закрыли файл после записи

}

8. Работа программы.

После запуска программы пользователь нажимает на кнопку Работа с таблицей“ и в новом диалоге выбирает файл для считывания строки таблицы (рисунок 14).

 

Рисунок 14 – Диалог открытия файла

 

  После выбора файла производится считывание данных из него, модификация данных и запись новой информации в файл. В диалоге проекта заполняются два верхних элемента EDIT BOX.

  Для работы с переменными необходимо заполнить соответтвующими данными три элемента EDIT BOX в нижней части диалога проекта. После нажатия кнопки “Работа с переменными” эти данные будут помещены в файл out.txt, содержимое которого можно посмотреть при открытии.

  Итог работы приложения приведен на рисунке 15.

Рисунок 15 – Работа созданного проекта

 

Задания.

1) Открыть файл, содержащий 10 цифр, показать их в диалоге, создать новый файл, записать в него сумму этих цифр.

2) Создать файл, записать в него введенные в диалоге пользователем 3 целых числа, переместиться на начало файла, считать из него эти числа, показать в виде строки в диалоге.

3) Открыть файл, содержащий 10 целых чисел, показать их в диалоге, отсортировать по возрастанию и записать в новый файл.

4) Открыть файл, содержащий 10 целых чисел, найти среди них число, введенное пользователем, записать его индекс в новый файл и вывести на экран.

5) Открыть файл, содержащий текст, найти индексы всех вхождений в этот текст символа, введенного пользователем с клавиатуры символов, записать значения индексов в новый файл и вывести на экран.

6) Открыть файл, содержащий 10 целых чисел, показать их в диалоге, создать новый файл, записать в него среднее арифметическое этих чисел.

7) Открыть файл, содержащий 10 символов, показать их в диалоге и записать в новый файл ASCII-коды этих символов, каждое число должно находиться в отдельной строке.

8) Открыть файл, содержащий 5 букв латинского алфавита, показать их в диалоге, каждую из них сохранить в отдельном файле, название и расширение которых состоят из этой буквы.

9) Открыть файл, содержащий 10 символов, показать их в диалоге, записать в другой файл, изменив порядок следования букв на обратный.

10) Открыть файлы: 1 – содержащий восемь символов латинского алфавита, 2 – содержащий 3 символа латинского алфавита, 3 – содержащий 10 символов. Создать файл с названием, хранящимся в файле 1, расширением из файла 2, содержанием из файла 3. Показать содержимое файлов 1, 2, 3 в диалоге.


Дата добавления: 2018-04-05; просмотров: 245; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!