Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FILE не целиком записывает строку, а часть 
V
    Опции темы
metoflex
  Дата 4.2.2011, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 18.4.2010

Репутация: нет
Всего: нет



Здравствуйте! 

Сломал уже всю голову... Значит проблема вот какого характера:

Я в ходе программы формирую необходимую мне строку, забирая данные из различных полей структуры... в результате имею некоторую переменную CString (это str2) в которой (смотрю исключительно через дебаг) лежит на данном этаме, что-то по типу:

str2; // "11 OBJECT-TYPE SYNTAX INTEGER "32423" MAX-ACCESS write-only STATUS current"

Cfile.SeekToEnd();
Cfile.WriteString(str2);  (Здесь навожу на str2- лежит тоже самое, что написал выше, т.е. лежит правильный набор символов, который мне необходимо записать в файл. Но вот если здесь же я посмотрю параметры в данный момент времени у Cfile  то обнаруживается непонятная вещь, там в одном из полей лежит следующее:

 "11 OBJECT-TYPE SYNTAX INTEGER " " Вообщем-то вот эту часть он мне и записывает... не понятно то что, почему при правильных параметрах у str2 записывается лишь часть этой сформированной строки...

Спасибо!



Это сообщение отредактировал(а) metoflex - 4.2.2011, 12:10
PM MAIL   Вверх
metoflex
Дата 4.2.2011, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 18.4.2010

Репутация: нет
Всего: нет



Вот сделал скрины дебага:

http://s59.radikal.ru/i163/1102/c4/c3be0f35bf4c.jpg (Это данные что лежат в str2)

http://s46.radikal.ru/i111/1102/17/0006e9ab694d.jpg (Это то что в одном из разделов у Cfile)
PM MAIL   Вверх
Earnest
Дата 4.2.2011, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Ну, во-первых, на картинках у тебя не совсем то, что ты написал: все совпадает вплоть до "цук" или что там у тебя.
Во-вторых, CFile не имеет функции WriteString; возможно ты имел в виду CStudioFile.
И еще нужно иметь в виду следующее. CString это довольно хитрый объект: он содержит и си-строку, которая должна завершаться нулем, и счетчик символов. И 2 ограничителя могут быть иногда рассогласованы, если ты ковыряешься в буфере строки напрямую. Например, в пределах указанной длины вполне могут быть 0-символы. А WriteString принимает именно си-строку, т.е. до ближайшего нуля. Возможно, дело в этом. Если причина не в этом, то зайди отладчиком внутрь WriteString да посмотри.


--------------------
...
PM   Вверх
metoflex
Дата 4.2.2011, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 18.4.2010

Репутация: нет
Всего: нет



Извиняюсь за неточности, шапку темы поправить не смог, а скрины и то что описывал-это пример, аналогию провел.


Сейчас посмотрю про writestring.

Добавлено через 3 минуты и 51 секунду
А как мне кнкретно что-либо глянуть в дебаге у writestring? Просто реально какие-то значиме данные они все в Cfile лежат.

Добавлено через 5 минут и 27 секунд
Вот код, если поможет:

Код

void CProcessingDataTree::CreateMibCode(CString str, HTREEITEM childfirst, HTREEITEM first, CString path)
//Method for create mib-code
{
 
        static int i=0;
        static int j=0;
        int k=0;
        int rez=0;
        CString str2, str3;
        CString type, strID;
        CString extstr;
        int y=0;
 
        do 
        {
                CStdioFile Cfile;
                Cfile.Open(path, CFile::modeWrite);
                str2="";
                str2.Format(_T(""));
                Cfile.WriteString(str2);
                CGenericNodeData* type;
                DWORD_PTR typer;
                typer=pTree->TreeCntrl.GetItemData(childfirst);
                type=(CGenericNodeData*)typer;
                if (!(childfirst==FIRST))
                {
                        switch (type->Type)
                        {
                        case 0:
                                {
                                        CNodeDataValue* data;
                                        DWORD_PTR dater;
                                        dater=pTree->TreeCntrl.GetItemData(childfirst);
                                        data=(CNodeDataValue*)dater;
                                        if(data->Syntax==0)
                                        {
                                                str2.Format(_T("%s OBJECT IDENTIFIER ::= { "), pTree->TreeCntrl.GetItemText(childfirst));
                                                if(childfirst==FIRST)
                                                {
                                                        str2+="enterprises";
                                                }
                                                else
                                                {
                                                        str2+=AddPrefixName(_T(""),pTree->TreeCntrl.GetParentItem(childfirst));
                                                }
 
                                                str3.Format(_T(" %d}\n\n"), data->ID);
                                                str2+=str3;
                                        }
                                        else
                                        {
                                                str2.Format(_T("%s OBJECT-TYPE\nSYNTAX "), pTree->TreeCntrl.GetItemText(childfirst));
 
                                                switch(data->Syntax)
                                                {
                                                case 0:
                                                        {
                                                                str2+="None\n";
                                                        }break;
                                                case 1: 
                                                        {
                                                                str2+="INTEGER\n";
                                                        } break;
                                                case 2:  
                                                        {
                                                                str2+="INTEGER\n"; 
                                                        } break;
                                                case 3: 
                                                        {
                                                                str2+="OCTET STRING\n";
                                                        } break;
                                                }
 
                                                if(!(data->Units==""))
                                                {
                                                        str2+="\"";
                                                        str2+=data->Units;
                                                        str2+="\"\n";
                                                }
 
                                                str2+="MAX-ACCESS ";
 
                                                switch (data->Access)
                                                {
                                                case 0: 
                                                        {
                                                                str2+="read-only\n";
                                                        } break;
                                                case 1: 
                                                        {
                                                                str2+="write-only\n";
                                                        }break;
                                                case 2: 
                                                        {
                                                                str2+="read-write\n";
                                                        }break;
                                                }
                                                str2+="STATUS ";
                                                switch (data->Status)
                                                {
                                                case 0: 
                                                        {
                                                                str2+="current\n"; 
 
                                                        } break;
                                                case 1: 
                                                        {
                                                                str2+="deprecated\n";
 
                                                        }break;
                                                case 2: 
                                                        {
                                                                str2+="obsolete\n";
 
                                                        }break;
                                                }
 
                                                if(!(data->Description==""))
                                                {
                                                        str2+="\"";
                                                        str2+=data->Description;
                                                        str2+="\"\n";
                                                }
                                                str2+="::= {";
 
                                                if(childfirst==FIRST)
                                                {
                                                        str2+="enterprises";
                                                }
                                                else
                                                {
 
                                                        str2+=AddPrefixName(_T(""),pTree->TreeCntrl.GetParentItem(childfirst));
                                                }
                                                str3.Format(_T(" %d"), data->ID);
                                                str2+=str3;
                                                str2+="}\n\n";
                                        }
                                        Cfile.SeekToEnd();
                                        Cfile.WriteString(str2);  // Вот та злосчастная строка!!!
 
                                }
                                break;
                        case 1:
                                {
 
                                        CNodeDataTrap* data;
                                        DWORD_PTR dater;
                                        HTREEITEM NODE;
                                        dater=pTree->TreeCntrl.GetItemData(childfirst);
                                        data=(CNodeDataTrap*)dater;
                                        str2.Format(_T("%s NOTIFICATION-TYPE\n"), pTree->TreeCntrl.GetItemText(childfirst));
 
 
                                        if(!(data->List[i]=="NULL"))
                                        {
                                                str2+="OBJECTS {";
 
                                                for (int i=0;i<=3;i++)
                                                {
                                                        NODE=pTree->TreeCntrl.FindType2(pTree->TreeCntrl.CreationID(data->List[i],0),0,FIRST);
                                                        str2+=pTree->TreeCntrl.GetItemText(NODE);
 
                                                        if(!(i==3))
                                                        {
                                                                str2+=", ";
                                                        }
                                                }
 
                                                str2+="}\n";
 
                                        }
                                        str2+="STATUS ";
 
                                        switch (data->Status)
                                        {
                                        case 0: 
                                                {
                                                        str2+="current\n"; 
 
                                                } break;
                                        case 1: 
                                                {
                                                        str2+="deprecated\n";
 
                                                }break;
                                        case 2: 
                                                {
                                                        str2+="obsolete\n";
 
                                                }break;
                                        }
 
                                        if(!(data->Description==""))
                                        {
                                                str2+="DESCRIPTION ";
                                                str2+="\"";
                                                str2+=data->Description;
                                                str2+="\"\n";
                                        }
                                        str2+="::= {";
 
                                        if(childfirst==FIRST)
                                        {
                                                str2+="enterprises";
                                        }
                                        else
                                        {
                                                str2+=pTree->TreeCntrl.GetItemText(pTree->TreeCntrl.GetParentItem(childfirst));
                                        }
 
                                        str3.Format(_T(" %d"), data->ID);
                                        str2+=str3;
                                        str2+="}\n\n";
                                        Cfile.SeekToEnd();
                                        Cfile.WriteString(str2);
 
                                }break;
                        }
                }
                Cfile.Close();
 
                if (pTree->TreeCntrl.GetChildItem(childfirst))
                {
                        CreateMibCode(str,pTree->TreeCntrl.GetChildItem(childfirst),first, path); 
                }
        }
        while (childfirst=pTree->TreeCntrl.GetNextSiblingItem(childfirst));
 
        return;
}

PM MAIL   Вверх
Earnest
Дата 4.2.2011, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Код смотреть не хочется - много букв.
А внутрь функции сходить - так же как в любую свою - код-то доступен. И проследи за изменением буфера файла, куда строка пишется. 


--------------------
...
PM   Вверх
metoflex
Дата 8.2.2011, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 18.4.2010

Репутация: нет
Всего: нет



Вопрос решил- злобный CStdioString не писал русский язык, всё профиксил.

PM MAIL   Вверх
Alca
Дата 8.2.2011, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 6
Всего: 50



а теперь пишет русский язык?


--------------------
PM WWW ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1143 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.