Вопрос № 51960: Здравствуйте уважаемые эксперты!
У меня возник такой вопрос касательно работы с файлами:
Существуют ли какие либо классы работы с файлами? Т.е. меня интересует что есть помимо стандартных fgets и т.д. Каким образом определить конец файла...Вопрос № 51974: Здравствуйте.
Очень нужна ваша помощь!
Требуется конкретное указание как в MFC переделать стандартную реакцию на сообщение на свою.
Т.е. по умолчанию клавиша Esc закрывает приложение. Я хочу перехватить сообщение и назначить свою реакцию....
Вопрос № 51.960
Здравствуйте уважаемые эксперты!
У меня возник такой вопрос касательно работы с файлами:
Существуют ли какие либо классы работы с файлами? Т.е. меня интересует что есть помимо стандартных fgets и т.д. Каким образом определить конец файла(для цикла) и как считывать файл построчно(а не в массив типа char на определенное количество элементов). Заранее благодарен за ответ...
Отправлен: 12.08.2006, 22:49
Вопрос задал: PollyRC (статус: 1-ый класс)
Всего ответов: 6 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Zitz
Здравствуйте, PollyRC!
Собственно, накатал я класс ;) Т.е. отвечая на Ваш первый вопрос - существуют ;)
feof(file) - "определить конец файла".
Что касается того как считывать построчно, примерно так как реализовано в классе:
bool ReadString(char * str) - считывает строку в Ваш буфер "массив типа char на определенное количество элементов"
const char * ReadString() - считывает строку во внутренний буфер (ибо считать куда-то все равно нужно) "массив типа char на определенное количество элементов" и возвращает считанную строку, в данном случае Вам не нужно грузиться по поводу кол-ва элементов.
Ну а классы для работы с файлами существуют, мне например для текстовых файлов очень нравится класс CStdioFile из MFC (библиотека классов такая). Есть ли классы в стандартных библиотеках? Что-то не припомню...
А помимо fgetc с файлами можно работать через CreateFile (в Windows.h, если он у Вас есть) или через stream (см. приложение в конце).
Приложение:
--------- Успех неизбежен + Думать вообще полезно + Чем сейчас, тем лучше
Ответ отправил: Zitz (статус: Студент)
Ответ отправлен: 13.08.2006, 00:52
Отвечает: estiGi
Здравствуйте, PollyRC!
Ну прикольно, класс накатали... :)) Обвертка в обверке :-)
Просто хотелось бы добавить. CreateFile, так как и windows.h, собственно, быть не может, т.к. это и есть АПИ, и все остальные FILE* и stream'ы работают кажись через него (влом лезть в код проверять, но вроде других путей нету).
А вот эта фраза примечательная:
"Есть ли классы в стандартных библиотеках? Что-то не припомню..." :)
Классы ifstream, ostream, basic_stream'ы всякие - это и есть стандартная библиотека, что Вы и подстверждаете, написав следующеи строки:
#include "fstream"
#include "iostream"
using namespace std;
:)
Ответ отправил: estiGi (статус: Студент)
Ответ отправлен: 13.08.2006, 07:09
Отвечает: gitter
Здравствуйте, PollyRC!
Если Вы работаете с MFC, то выбирете класс CStdioFile, иначе Вам лучше использовать классы сторонних разработчиков, или же, лучше всего, как мне кажется, написать свой класс, как это, например, предложил эксперт Zitz.
Удачи!
Ответ отправил: gitter (статус: Студент)
Ответ отправлен: 13.08.2006, 18:11
Отвечает: Хватов Сергей
Здравствуйте, PollyRC!
Конечно.
std::iostream - там их целое семейство.
Только они в отличие от библиотеки stdio с двоичными данными не работают.
Ответ отправил: Хватов Сергей (статус: 1-ый класс)
Ответ отправлен: 14.08.2006, 10:30
Отвечает: Santana
Здравствуйте, PollyRC!
Если файлец не большой, можно использовать TStringList. Очень удобно. методом LoadFromFile грузишь файл. методом SaveToFile сохраняешь. в свойстве Text все содержимое файла. а в коллекции Strings ... оно же ... только построчкам. и много других мелких радостей ...
Ответ отправил: Santana (статус: 5-ый класс)
Ответ отправлен: 14.08.2006, 10:48
Отвечает: Arct
Здравствуйте, PollyRC!
Конец файла - константа EOF
[code]
while(stream!=EOF)
{
}
[/code]
построчное считывание - функция getline( *buf,int num, char delim);
Возвращает строку в буфер( *buf) не более num символов, пока не встретит
символ delim, конец строки('
') или конец файла(EOF)
читай учебник :)
Ответ отправил: Arct (статус: 1-ый класс)
Ответ отправлен: 17.08.2006, 10:06
Вопрос № 51.974
Здравствуйте.
Очень нужна ваша помощь!
Требуется конкретное указание как в MFC переделать стандартную реакцию на сообщение на свою.
Т.е. по умолчанию клавиша Esc закрывает приложение. Я хочу перехватить сообщение и назначить свою реакцию.
Заранее спасибо!
Отправлен: 13.08.2006, 01:11
Вопрос задал: MeX (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Ross
Здравствуйте, MeX!
Откройте окно Class View и выберите класс, который будет перехватывать сообщение.
Откройте окно Properties и нажмите кнопку Messages.
В списке найдите сообщение WM_CHAR.
Щелкните справа от него и создайте обработчик (Add OnChar).
После этого будет создана функция OnChar в одном из параметров которой передается код клавиши.
Если он равен 27 или 0x1b значит была нажата клавиша Esc
Ответ отправил: Ross (статус: 1-ый класс)
Ответ отправлен: 13.08.2006, 01:51 Оценка за ответ: 5 Комментарий оценки: Спасибо большое!
Отвечает: estiGi
Здравствуйте, MeX!
Фигня, простите. Ненужно никаких WM_CHAR'ов. Да и не сработает. Создаем обработчик PreTranslateMessage и перехватываем там
Можно перехватывать на более низком уровне - в WindowProc, но более геморройно
Ответ отправил: estiGi (статус: Студент)
Ответ отправлен: 13.08.2006, 06:58 Оценка за ответ: 5 Комментарий оценки: :) Хе, а вот такое кусок кода наиболее ценен. Большое спасибо! А то я уж измучился!
Отвечает: Mihasic
Здравствуйте, MeX!
Я так понял Вы про диалог говорите...
Самый простой способ, поставить в классе заглушку:
protected:
virtual void OnCancel() {}
Ответ отправил: Mihasic (статус: 5-ый класс)
Ответ отправлен: 14.08.2006, 09:55 Оценка за ответ: 3 Комментарий оценки: Спасибо, но пробовал:НЕ работает!:(