Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с файлами 
:(
    Опции темы
madbizarre
Дата 18.11.2010, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот такая у меня проблема есть код обработка нажатия на ОК
Код

case IDOK:
          ZeroMemory(&ofn, sizeof(OPENFILENAME));
                    ofn.lStructSize = sizeof(OPENFILENAME);
                    ofn.lpstrFilter = ("Файлы отчета .txt\0*.txt");
                    ofn.nFilterIndex = 1;
                    ofn.lpstrFile = szFile;
                    ofn.nMaxFile = sizeof(szFile) / sizeof( szFile[0] );
                    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
                    if(GetSaveFileName(&ofn))
                    {
                        FILE *f;
                        f=fopen(szFile,"wb");
              
            for(int i=0;i<5;i++) 
              {
                SendMessage(hListBox,LB_GETTEXT,i,(LPARAM)szInfo[i]);
                strcat(szInfo[i],"\n");
                fwrite(szInfo[i],strlen(szInfo[i]),1,f);
              } 
                  fclose(f);
                    }
                EndDialog(hDlg, TRUE);
            break;

Смысл в том что раньше этот код работал пока я не изменил алгоритм записи в файл
Т.е. вот так работает
Код

            case IDOK:
          ZeroMemory(&ofn, sizeof(OPENFILENAME));
                    ofn.lStructSize = sizeof(OPENFILENAME);
                    ofn.lpstrFilter = ("Файлы отчета .doc\0*.doc");
                    ofn.nFilterIndex = 1;
                    ofn.lpstrFile = szFile;
                    ofn.nMaxFile = sizeof(szFile) / sizeof( szFile[0] );
                    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
                    if(GetSaveFileName(&ofn))
                    {
                        FILE *f;
                        f=fopen(szFile,"wb");
            SendMessage(hListBox,LB_GETTEXT,0,(LPARAM)szAudio);
            strcat(szAudio,"\n");
            fwrite(szAudio,strlen(szAudio),1,f);
            
            SendMessage(hListBox,LB_GETTEXT,1,(LPARAM)szGame);
            strcat(szGame,"\n");
            fwrite(szGame,strlen(szGame),1,f);
  
            SendMessage(hListBox,LB_GETTEXT,2,(LPARAM)szOther);
            strcat(szOther,"\n");
            fwrite(szOther,strlen(szOther),1,f);

            SendMessage(hListBox,LB_GETTEXT,3,(LPARAM)szSoft);
            strcat(szSoft,"\n");
            fwrite(szSoft,strlen(szSoft),1,f); 

            SendMessage(hListBox,LB_GETTEXT,4,(LPARAM)szVideo);
            strcat(szVideo,"\n");
            fwrite(szVideo,strlen(szVideo),1,f);              
            fclose(f);
                    }

                EndDialog(hDlg, TRUE);
            break;

Помогите найти ошибку
PM MAIL   Вверх
ama_kid
Дата 18.11.2010, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



А отладчик зачем нам дан? Доходишь до строки fwrite и смотришь, что у тебя в буферах.
объявления szInfo и szAudio, szGame etc в студию.


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
bass
Дата 18.11.2010, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



strlen(szInfo[i])  как переменную стринг определил????
PM MAIL   Вверх
jonie
Дата 18.11.2010, 21:43 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



как минимум тут ошибка
Код

                    ofn.lpstrFilter = ("Файлы отчета .txt\0*.txt");

должно быть "Файлы отчета .txt\0*.txt\0" (второй терминирующий \0 добавит комилятор).

Дальше не смотрел даже...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
madbizarre
Дата 18.11.2010, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Объявление для первого случая
Код

static   char   szInfo[5][36] = {"Audio","Game","Other", "Soft", "Video"};


Объвление для второго случая
Код

char szAudio[25] = "Audio",szVideo[25] = "Video", szOther[25] = "Other",szSoft[25] = "Soft",szGame[25] = "Game";


По логике вещей чтобы дойти до обработки записи вфайл он должен пройти условие 
Код

if(GetSaveFileName(&ofn)


Добавлено через 1 минуту и 12 секунд
Цитата(jonie @ 18.11.2010,  21:43)
как минимум тут ошибка
Код

                    ofn.lpstrFilter = ("Файлы отчета .txt\0*.txt");

должно быть "Файлы отчета .txt\0*.txt\0" (второй терминирующий \0 добавит комилятор).

Дальше не смотрел даже...

Изменил на твой вариант ничего не изменилось smile Значит это не ошибка
PM MAIL   Вверх
Estranged
Дата 19.11.2010, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



"Помогите найти ошибку". А в чем ошибка-то?
PM MAIL   Вверх
madbizarre
Дата 19.11.2010, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В том что после нажатия на кнопку ок, ничего не происходит окно закрывается, и как я писал раньше не отрабатывается условие. Просто два одинаковых случая, с разным алгоритмом обработки данных. Только в одном файл сохраняется в другом ничего не происходит. При том что когда я написал этот код он работал, сохранил проект и забыл, на след день запустил, не работает :-( вот и не могу понять в чем причина, если я ни чего не менял smile
PM MAIL   Вверх
Estranged
Дата 19.11.2010, 12:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А, GetSaveFileName не работает, да? Читаем доку по ZeroMemory и видим там To avoid any undesired effects of optimizing compilers, use the SecureZeroMemory function. 
Потом есть GetLastError, который выдает 57h: error lookup спасет при незнании английского:  Параметр задан неверно. 
А если учесть, что есть описание OPENFILENAME, где написано про lpstrFilter следующее: A buffer containing pairs of null-terminated filter strings. The last string in the buffer must be terminated by two NULL characters. Т.е. "Файлы отчета .txt\0*.txt\0\0".
И, наконец, читаем про lpstrFile: Pointer to a buffer that contains a file name used to initialize the File Name edit control. The first character of this buffer must be NULL if initialization is not necessary. Теперь просто добавив воды szFile [0] = '\0'; перед GetSaveFileName, получаем желаемое.

Sad, but true.

Это сообщение отредактировал(а) Estranged - 19.11.2010, 12:51
PM MAIL   Вверх
madbizarre
Дата 19.11.2010, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо тебе огромное помог, всё заработало...
PM MAIL   Вверх
jonie
Дата 19.11.2010, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Estranged, 
Цитата

Т.е. "Файлы отчета .txt\0*.txt\0\0".
да не надо тут два нуля городить, зачем ТРИ нуля в конеце? (один добавит компилятор!).
И я об этом говорил уже, но цитирую автора: "Изменил на твой вариант ничего не изменилось smile Значит это не ошибка" 8-)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
madbizarre
Дата 19.11.2010, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Но действительно если ставить 
Код

"Файлы отчета .txt\0*.txt\0\0".

Не работает, проверял два раза.
А вот если ставить
Код

szFile [0] = '\0';

Перед условием то работает, извини но это факт
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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