Помощь - Поиск - Пользователи - Календарь
Полная версия: Открытие содерж. файла в диалоговом окне
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
@^WARlock^@
Люди кто знает подскажите решение такой задачки.

Даны два поля, в одно из которых нужно ввести путь к файлу, а в другом(List Box) должно отобразиться содержимое этого файла, после нажатия кнопки.
volvo
В чем проблема? Открываешь файл со введенным именем, построчно его читаешь (ReadString) и пишешь прочитанную строку в CListBox с помощью AddString(). Что из этого не получается?
@^WARlock^@
А код для открытия файла будет такой?

CFile cf;
cf.Open( "c:\1.txt", CFile::modeCreate|CFile::modeReadWrite);
char szSampleText[100];
UINT lBytesRead = cf.Read (szSampleText,100);
volvo
Это у тебя не открытие, а создание файла получается. Затрешь все содержимое...

cf.Open( "c:\\1.txt", CFile::modeRead);

будет вполне достаточно для отображения файла в ListBox-е.

Update: слеш - двойной...
@^WARlock^@
А ну да modeRead -файл открывается только для чтения, а modeCreate - создается новый файл. Ошибочка вышла.

Но этот код я расчитываю записать в кнопке, а как кнопку связать с ListBox.
volvo
А что, если ты напишешь для кнопки:

CFile cf;
if (cf.Open("C:\\1.txt", CFile::modeRead)) {
CString s;
while(cf.ReadString(s)) {
lst_box.AddString(s);
}
}

это будет противозаконно?
@^WARlock^@
Дайка я уточню т.е. допустим я сздаю кнопку и поле ListBox. Записываю этот код в кнопку и после нажатия на нее, содержимое файла покажется в ListBox.
volvo
Угу... Так и будет...
@^WARlock^@
Что-то не то. Программа находит 2 ошибки.
Вот как я делаю. Нажимаю на созданную кнопку два раза, появляется окно кода:

void CL3Dlg::OnButton1() 
{
//сюда я записываю код
CFile cf;
if (cf.Open("C:\\1.txt", CFile::modeRead))
{
CString s;
while(cf.ReadString(s)) // программа говорит, что в этой строке 2 ошибки
{
lst_box.AddString(s);
}
}
}


А если я убираю скобочку в начале и в конце, то прога говорит что 2 ошибки встроке:
CFile cf;


Из-за чего такое может быть?
volvo
unsure.gif
Ну, да... Пользуйся не CFile, а CStdioFile.
@^WARlock^@
Поменял я CFile на CStdioFile. Всеровно две оштбки.

error C2065: 'lst_box' : undeclared identifier
error C2228: left of '.AddString' must have class/struct/union type

А в настройках ListBox, что надо выставить? Или код приписать?
lst_box.AddString(s);

lst_box это название?
volvo
Цитата
lst_box это название?
А ты как думаешь? Я что, телепат и знаю, КАК ты называешь свой ListBox? Или ты привел свой код полностью?

Цитата
А в настройках ListBox, что надо выставить? Или код приписать?
Да не надо никакой код никуда писать больше! Все, что надо сделать - я показал. Ты что в первый раз VC видишь? Или вас вообще не учат, прежде чем задание дать? Покажи, как ты назвал свой CListBox, я исправлю код, если ты сам не можешь догадаться.
@^WARlock^@
Цитата
Ты что в первый раз VC видишь? Или вас вообще не учат, прежде чем задание дать?

А говоришь, что не телепат.

Ну допустим я List box назвал LB, т.е. в коде программы надо будет поменять lst_box на LB.
Но ошибки то уткуда берутся?

Добавлено через 13 мин.
О атеперь говорит одна ошибка.
Вот такая:
error C2228: left of '.AddString' must have class/struct/union type


Добавлено через 18 мин.
Может глупый вопрос но на всякий случай для страховки, где обзывается поле ListBox.
@^WARlock^@
C предыдущим вопросом я разобрался, все работает, спасибо. Но я забыл, мне же еще поле Edit надо было включить.
В поле Edit надо ввести путь к файлу, нажать на кнопку и в поле ListBox появляется содержимое файла.
А мы сделали прогу только для выделенного текста.
Помогите доработать код программы.
void CL3Dlg::OnButton1() 
{
CStdioFile cf;
if (cf.Open("C:\\1.txt", CFile::modeRead))
{
CString s;
while(cf.ReadString(s))
{
m_List.AddString(s);
}
}
}




@^WARlock^@
Со всем я разобрался спасибо. Но хотелось бы модернизировать эту программу
void CL3Dlg::OnButton1() 
{
UpdateData();
CStdioFile cf;

if (cf.Open(m_Edit, CFile::modeRead))
{
CString s;
while(cf.ReadString(s))
{
m_List.AddString(s);
}
}
}


т.е. совместить с программой которая выводит на экран строки через одну. Которую помогал делать VOLVO в разделе "Файл и строки".
Короче вот она:
#include <iostream>
#include <fstream>

using namespace std;

const int max_line_size = 80;

int main()
{
ifstream in_file("1.txt", ios::in);
char buffer[max_line_size];

int count = 0;
while(in_file.getline(buffer, max_line_size))
{
if(!(count++ % 2))
cout << buffer << endl;
}
in_file.close();
return 0;
}

Подскажите, как это сделать. Я пробовал но безуспешно. Может потому, что одна написана в MFC, а другая в win32 Aplication?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.