Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Visual C++/MFC/WTL > Срочно нужна помощь в работе с файлами |
Автор: Puzanova 5.1.2009, 22:09 |
Всем ,доброго времени суток! Ребята, кто может ,помогите пожалуйста!!!!! Я не могу справиться с ошибкой, а у меня очень мало осталось времени на доработку, а вот дорабатывать ещё много. Проблема заключается в следующем. Пишу в 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 6.1.2009, 18:22 |
Стало быть fin у тебя false, раз игнорируется. Насколько я помню, для потока это означает, что он не открыт. Вот с этим и разбирайся. |
Автор: Puzanova 6.1.2009, 19:05 |
Earnest, спасибо за столь ценное замечание. Но мой вопрос и заключался именно в этом. Я не понимаю, в чем может быть там ошибка. Абсолютно такая же конструкция ститывания файла в этом же проекте работает замечательно. Может есть какие-нибудь мысли по этому поводу? |
Автор: Dmi3ev 6.1.2009, 22:32 | ||||||||||
тут как раз самое интересное, а ты точек понаставил...
и вообще не так лучше писать, а так:
Добавлено через 2 минуты и 39 секунд
вот так достаточно!
|
Автор: Puzanova 8.1.2009, 13:49 | ||
Всем добрый день. 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 8.1.2009, 20:13 | ||
А я это и не предлагала. Я предлагала зайти в open. И посмотреть на соответствие кодировок. |