![]() |
|
|
![]()
|
|
| Rickert |
|
||||||||||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Недавно перешёл на VS 2005, раньше в VS 2003 не было никакх проблема с fopen и fprintf, а теперь такая песня:
Открываю файл:
Мне компилятор выдаёт предупреждение:
После чего пытаюсь записать в открытй файл:
tmp->num - int tmp->name и tmp->path - CString В них все значения правильные, но в файл она пишет след. значения:
Добавлено @ 11:13 Только что пробовал проделать всё через API'шные функции:
Смотрю в дебаге str - значения нормально прописались, а в файле всё равно белебердень. Это сообщение отредактировал(а) Rickert - 19.11.2006, 11:14 -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
||||||||||
|
|||||||||||
| nerezus |
|
||||||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
Это очередная гнилая попытка M$ подмять стандарт под себя:
|
||||||
|
|||||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
С этим ясно, а что по поводу неверно - записываемого значения?
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
С переводом значения из wchar_t в char Это сообщение отредактировал(а) Rickert - 19.11.2006, 14:09 -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Интересно, что при использовании API'шных функций, всё-таки информация записывается неправильно:
Почему -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 7 Всего: 92 |
name и path у тебя в уникоде? Если сите просто CStringб то вероятно да. Посему либо конверть в анси, либо смотри файлик в уникоде
|
|||
|
||||
| Rickert |
|
||||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Любитель, не знаю. А по умолчанию CString хранит в юникоде разве?
Как?
Понимаешь, там даже значений никаких нет. Там сначала идёт длинна строки, а потом строка. Смотри, видишь длинну 43? А после неё всего лишь два символа. Как ты этот файл не просматривай, но если там никаких значений, то они не появятся из ниоткуда. -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
||||
|
|||||
| takedo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: нет Всего: 3 |
-------------------- я не гольфист - я хоккеист |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 7 Всего: 92 |
CString это не конкретный тип. Он типодефится либо в CStringA либо в CStringW. Сделай тупую проверку: попробуй прочитать теперь из файла (программно) и выведи как-нибудь на экран. Или (в данном случае разумней) используй CStringA или std::string.
|
|||
|
||||
| Rickert |
|
||||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Пробовал все варианты уже _T, _TEXT, L"".
CStringA str2 - нулевой результат, тот же глюк. CStringW str2 - нулевой результат, тот же глюк. Это сообщение отредактировал(а) Rickert - 23.11.2006, 16:47 -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
В чем глюк-то?
Из беглого просмотра темы не поняла. -------------------- ... |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Глюк в том, что в переменной хранятся нормальное значение строки(смотрю в дебаге), а при любом выводе в файл(FILE, CFile, CreateFile) - в файл пишется белеберда.
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Файл текстовый или двоичный? Что именно видишь в файле? Имей в виду, что юникодные или русские символы могут выглядеть совсем не так, как ты ожидаешь.
Кстати, строку лучше писать вместе с завершающим нулем, т.е. GetLength()+1 символов. Либо писать перед строкой ее длину. Иначе как читать потом будешь? Кроме того, в Юникоде длина символа = 2 байта, так что в файл нужно писать соответственно:
-------------------- ... |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 7 Всего: 92 |
А ещё вспомни, что Format типобезопасностью не радует (т. к. юзает (w)snprintf) => %s внаглую интерпретирует строку не как юникод. Поэтому ни в коем случае не используй юникод (или другие форматные символы ставь -> см. MSDN), а лучше откажись от нетипобезопасных функций (методов).
|
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Посмотри то, что я постил до этого - там на все вопросы ответы. Файл не бинарник. Вижу в нём вышеуказнное. -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Вы когда-нибудь записью в файл занимались? Можете привести мне куски вашего кода?
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: нет Всего: 67 |
Это сообщение отредактировал(а) Partizan - 25.11.2006, 17:22 -------------------- СУВ, Partizan. |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Partizan, я имел ввиду вывод в файл под VS 2005, значения из CString переменной.
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Вот, что я максимум смог выжать:
Она пишет иногда верно, а иногда не до конца. Т.е. некоторые символы недописывает. -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 4 Всего: 56 |
дай весь код лтносящийся к этому куску(все структуры и т.д)
Добавлено @ 13:28
все нормально записывает Добавлено @ 13:29 у тя проблема в том , что ты размер строки считаешь не там, и в результате получаешь , длину строки меньше чем требуется записать.. |
|||
|
||||
| Rickert |
|
||||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Структура:
Действительно, у меня был косяк в том, что я не ту длинну указывал. Теперь смотри. Твой вариант работает только для одного вызова WriteFile. Делаем так:
И программа пишет туже самую билеберду. Добавлено @ 14:02 Да и символ конца строки не воспринемается впринципе "\n", равно как и возврат коретки "\r" Я так понимаю, это из-за хранения в Юникоде. -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
||||
|
|||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 4 Всего: 56 |
а ты уверен, что содержание tmp нормальное??
я проверить не могу у меня твоих данных нет.. |
|||
|
||||
| vinter |
|
||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 4 Всего: 56 |
содержание файла
|
||||
|
|||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Слушай, а у тебя какая VS? Дело в том, что под 2003 у меня всё нормально. А вот в 2005 проблемы эти появились.
Добавлено @ 15:04 ЗЫ Результат работы в файле с твоим циклом см. в аттаче. 1)Она все символы пишет через пробелы 2)Не воспринемает "\n" ЗЗЫ У меня все значения в структуре правильные. Проверяю прямо перед выполнением функции записи. Присоединённый файл ( Кол-во скачиваний: 8 )
123.jpg 14,85 Kb-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 4 Всего: 56 |
у меня 2003, 2005 нет и проверить не могу.. так оставь в 2003:)
|
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
vinter, блин, а тему топика вообще читать не надо чтоли
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 7 Всего: 92 |
1. Многие блокноты не воспринимают \n за перевод строки - нужно в дос/вин-стиле: \r\n.
2. В данном случае единицу к lrn добавлять точно не надо. WriteFile пишет побайтово. Пусть у нас есть строка "preved" (str.GetLength() == 6). Побайтово она выглядит так (нестрогий синтаксис):
Точно как уникод коды выглядят не помню, но смысл правильный. Ноль-символ в файл писать не надо. Посему +1 при получении длины убираем. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Точно, все выводится нормально: это Юникод. И, как сказал Любитель, для перевода строки нужно \r\n.
Файл-то у тебе открыт в бинарном режиме - никакой автоматической трансляции нет. -------------------- ... |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Earnest, хорошо, тогда как записать не в юникоде?
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 7 Всего: 92 |
Отключи в настройках проекта. И ещё раз повторю попробуй убрать + 1 и поставить \r в примере
vinter. |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Любитель, хм... Юникод не отключал, убрал +1 и добавил \r (я так понял, она по-старинке - переходит на след. строку - \n - new line, а потом надо делать возврат каретки - \r - carrage return).
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 7 Всего: 92 |
Так в итоге помогло?
Эти два совета не предполагали отключение юникода (они универсальны). |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Любитель, в том-то и дело. Сам диву даюсь
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |