![]() |
|
![]() ![]() ![]() |
|
Puzanova |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 5.1.2009 Репутация: нет Всего: нет |
Всем ,доброго времени суток!
Ребята, кто может ,помогите пожалуйста!!!!! Я не могу справиться с ошибкой, а у меня очень мало осталось времени на доработку, а вот дорабатывать ещё много. Проблема заключается в следующем. Пишу в Visual Studio 2005 на MFC Пытаюсь считать с файла, данные не считываютя. Тело конструкции while (fin) { ... } при пошаговом прогоне игнорируется. Я примерно понимаю, в чём проблема. Для открытия файлов с русскими символами в пути или имени необходимо использовать UNICODE или MULTIBYTE кодировку. А вот как её применять у меня нет никаких мыслей. Помогите , пожалуйста. Привожу кусок кода: // Открытие файла с заготовками void CcuttingDoc::OnFilePolyOpen() { // вывод диалога для открытия данных из файла CFileDialog dlg (TRUE,_T("*.plg"), _T("*.plg") ,OFN_HIDEREADONLY, _T(" Laba Files (*.plg) |*.plg||")); if (dlg.DoModal()==IDOK) { CString str, file_name; file_name=dlg.GetPathName(); // получаем путь this->file_name = file_name; //запоминаем путь std::ifstream fin; fin.open(file_name,std::ios::in); // открытие файла std::istream& ignore(int n = 1, int delimiter = EOF); while (fin) { …… } this->UpdateAllViews(0); } } Заранее спасибо))) |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Стало быть fin у тебя false, раз игнорируется. Насколько я помню, для потока это означает, что он не открыт. Вот с этим и разбирайся.
-------------------- ... |
|||
|
||||
Puzanova |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 5.1.2009 Репутация: нет Всего: нет |
Earnest, спасибо за столь ценное замечание. Но мой вопрос и заключался именно в этом. Я не понимаю, в чем может быть там ошибка. Абсолютно такая же конструкция ститывания файла в этом же проекте работает замечательно. Может есть какие-нибудь мысли по этому поводу?
|
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Так бы и сказала. Кто тебя поймет, что ты понимаешь, а что нет. Да, конечно. Пройдись пошагово дебагером - я имею в виду внутрь open. Ничего там страшного нет, разберешься, где оно не открывает. Естественно, приглядывайся к значениям переменных. ИМХО, проблема либо с именем файла, либо с его состоянием (нет его, открыт еще кем-то, итд, итп) И что это за хрень? Написано "a=a". Добавлено через 5 минут и 50 секунд Вот еще: Ты ее уже применяешь - какую-то. Если ты используешь ifstream, то подразумевается, что и в файле не Юникод, и имя файла не-юникодовое. Потому что это поток char. Иначе действительно могут быть проблемы. Проверь свои установки, какие строки ты используешь - широкие или "обычные". -------------------- ... |
|||
|
||||
Dmi3ev |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: нет Всего: 41 |
тут как раз самое интересное, а ты точек понаставил...
и вообще не так лучше писать, а так:
Добавлено через 2 минуты и 39 секунд
вот так достаточно!
-------------------- |
||||||||||
|
|||||||||||
Puzanova |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 5.1.2009 Репутация: нет Всего: нет |
Всем добрый день.
Earnest, я не понимаю, зачем разбирать конструкции записанные в While когда обработчик туда не заходит?))я уверенна, что собака зарыта в пути . Почему-то не хочет открываться файл. Привожу полностью считывание с файла: void CcuttingDoc::OnFilePolyOpen() { // очиска предыдущих данных object.FigInRaskroi.clear(); UpdateAllViews(NULL); std::vector<PointCoord> TmpPt;// временный вектор для хранения точек int n; // номер точки в данной фигуре size_t Num // кол-во точек в фигуре всего double Xmin,Ymin,Xmax,Ymax,x,y;// минимальные и максимальные координаты // многоугольников // (x,y)-координаты текущей точки. size_t count_top // число вершин // вывод диалога для открытия данных из файла CFileDialog dlg (TRUE, "*.plg","3.plg",OFN_HIDEREADONLY, "Type Files (*.plg)|*.plg||"); if (dlg.DoModal()==IDOK) { CString str, file_name; file_name=dlg.GetPathName(); // получаем путь std::ifstream fin; fin.open(file_name,std::ios::in); // открытие файла std::istream &ignore(int n=1, int delimeter=EOF); while (fin) { size_t count_polygon; // количество полигонов fin.ignore(5,'='); // игнорируем 5 символов до "=" fin >> count_polygon; // запоминаем кол-во полигонов for(size_t i=0; i<=count_polygon;++i) { std::string name_polygon; // имя полигона fin >> name_polygon; // считываем имя данного полигона // устанавливаем имя i-ого полигнона name.Name.Format(name_polygon.c_str()); fin.ignore(20,'='); fin >> count_top; // запоминаем кол-во вершин мног-ка name.My_Top_First.clear(); // очищаем вектор точек TmpPt.clear(); //Тут я считываю ещё координаты } int ind = object.RawData.size(); //получаем размер вектора полигонов //удаляем последний полигон из вектора if (ind>0){ object.RawData.erase(object.RawData.begin()+ind-1);} this->UpdateAllViews(0); } } В проекте есть 2 вида счтывание с файла. Считывание заготовок и считывание карты раскроя. Вообщем к чему это всё: Считывание заготовок(которое чобственно и не работает) работает,если сначала проделать считывание раскроя. В коде они никак не связанны,я не понимаю в чём зависимоть.
eof() компилятор ругается((((( Спасибо за помошь |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
А я это и не предлагала. Я предлагала зайти в open. И посмотреть на соответствие кодировок. -------------------- ... |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |