Контакты

Для связи с нами можно использовать:
irc://irc.chatnet.ru:#gfs
icq://546460
email://cobalt[@]gfs-team.ru

Все материалы предоставлены только с ознакомительной целью
ГлавнаяСтатьиКодингMFC - урок четвертый.
© s0 22.03.2007

Работа с файлами Часть 1 - Разбираем класс

Для работы с файлами в MFC существует класс CFile. Этот класс на много удобнее чем изветные нам функции из stdio и iostream.Чтобы получить возможность использовать этот класс, надо в ваш проэкт вклюить файл afx.h(если вы используете мастер создание проэкта, то этот файл будетавтоматически добавлен к проэкту)

Класс CFile предоставляет нам большой набор функций для работы с файлами, но самыми важными для нас являются функции чтения-записи, и функции позицирования(установки указателя в нужное место в открытом файле)Функции:

CFile::Open - функция служит для открытия файла.
CFile:: Open( LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL ); lpszFileName - строка содержащая путь к файлу.
nOpenFlags - флаги для открытия файла. В основном ипользуются флаги modeRead - открыть для чтения, modeWrite - открыть для записи и modeCreate - создать файл. Флаги можно комбинировать используя символ "|".
CFileException* pError = NULL - указатель на переменную которая будет содержать информацию об ошибке открытия файла. Функция Open возвращает не нулевое значение в случае если открытие прошло успешно. Либо возращает 0 если произошла ошибка - в этом случае переменная pError будет содержать информацию об ошибке.

Пример:

CFile openFile;
CString fName;
fName = "file.txt";
if(!openFile.Open(fName, CFile::modeRead|CFile::modeWrite, NULL))
{
        //Тут действия в случае ошибки
}

CFile::Close - служит для закрытия файла. Функция требует аргументов.
CFile::Read - служит для чтения из файла(если файл был открыт с
флагом CFile::modeRead)
CFile::Read(void* lpBuf,  UINT nCount);
lpBuf - указатель на переменную для приема данных прочитаных из файла nCount - указывает сколько байт прочитать из файла. Функция возвращает кол-во байт прочитаных из файла(это значение может быть меньше nCount в том случае если достигнут конец файла)

Пример:


extern CFile cfile;
char pbuf[100];
UINT nBytesRead = cfile.Read( pbuf, 100 );

CFile::Write - служит для записи в файл
CFile::Write( const void* lpBuf, UINT nCount );
lpBuf - указатель на переменную содержащию данные для записи в файл nCount - кол-во байт которое будет записанно CFile::GetLength - служит для получения размера открытого файла. Часть 2 - пишем программу

Итак, мы с вами напишем программу которая будет - открывать текстовый файл, и считывать его содержимое в EditBox на форме.

Создаем новый проэкт MFC AppWizard(EXE) - Проделываем все шаги из прошлого урока. Project name - step4 Открое в ресурсах нашу форму и накидаем на нее контролы:

1 кнопка - IDC_OPEN, Open
2 EditBox:
1) IDC_EditOpen
2) IDC_EditText, и на вкладке Style ставим галочку на Multiline, Vertical Scroll и Want Return

Теперь так же, как в предыдущей статье присвоим нашим EditBox"ам переменные с помощью ClassWizard(CTRL+W)

Для IDC_EditOpen - m_EditOpen
Для IDC_EditText - m_EditText
Для IDC_OPEN - m_bOpen

Так же добавим 1 глобальную переменную(как в прошлом уроке)

Type - bool
Name - OpenRead
Public

И в файле step4Dlg.cpp в функции BOOL CStep4Dlg::OnInitDialog() после строчки // TODO: Add extra initialization here Проинициализируем ее OpenRead = false;

Щелкаем два раза на кнопке Open и начинаем писать код.

void CStep4Dlg::OnOpen()
{
        // TODO: Add your control notification handler code here
        CString fname; //Переменная для хранения имени файла
        CFile file;    //обьект класса CFile
        char ch[1024]; //Буффер для чтения данных из файла
        if(!OpenRead) //Если OpenRead=false то показываем диалог открытия файлов
        {
                CFileDialog fDialog(TRUE);
                fDialog.DoModal();
                m_EditOpen.SetWindowText(fDialog.GetPathName());
                m_bOpen.SetWindowText("Read");
                OpenRead = true;
        }
        else //Иначе
        {
                m_EditOpen.GetWindowText(fname); //Получаем имя файла
                if(!file.Open(fname, CFile::modeRead, NULL)) //Открываем его
                {
                        AfxMessageBox("Cannot open file");
                        return;
                }
                file.Read(&ch, 1024); //Читаем 1024 байт
                m_EditText.SetWindowText(ch);
                file.Close(); //Закрываем файл
                m_bOpen.SetWindowText("Open");//Меняем текст кнопки
                OpenRead = false;
        }
}

Я думаю из коментариев все понятно. Остановлюсь лишь на классе CFileDialog этот класс используется для показа диалогов открыти/закрытия файлов. CFileDialog fDialog(TRUE);

Обьявляем обьект класса. Значение TRUE говорит о том, что мы хотим Диалог открытия Файлов. Если поствить FALSE, то мы увидим Диалог Сохранения Файлов fDialog.DoModal()

Показывает диалог m_EditOpen.SetWindowText(fDialog.GetPathName()); Копируем в наш EditBox полный путь выбраному файлу, с помощью функции GetPathName() Подробние про функцию CFileDialog можно почитать тут

Ну вот и все. До встречи.




© s0 22.03.2007

e-Commerce Partners Network
Ник:

Текст:
P Br B I Qute



Код: обновить
Последние комментарии
24.06.2017 21:15:55 DeweyAloma написал:
If you have a desire to learn how to earn from...
Ручная распаковка NeoLite 2.0
24.06.2017 14:43:35 Issacpam написал:
Ckaйп evg7773 Ламинин +38097-613-1437 Laminine LPGN в Хуст Закарпатье 28 usd...
Взлом домофонов
21.06.2017 04:39:52 PRO написал:
Взлом и подбор паролей на почтовых сервисах и социальных сетях. Работаем со всеми...
Взлом E-mail (email, почты, мыла)
Реклама

Тут должна была быть ваша реклама, но мы потеряли глиняную табличку с ее текстом. SapeId: 665044

Rambler's Top100