Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2011, 22:49   #1
Trinock
Пользователь
 
Регистрация: 19.09.2011
Сообщений: 21
По умолчанию Не понятно почему, но строки не записываются в файл

Здравствуйте! Есть метод, который должен записывать в файл набор выходных параметров

Код:
void Settings::PutDataIntoFile(LPWSTR fileName)
{
	wofstream outFile(fileName);
	
	outFile << userName->c_str() << endl
			<< speed << endl
			<< countOfIterations << endl
			<< saturation << endl
			<< winWidth << endl
			<< winHeight << endl
			<< config << endl
			<< oneColor << endl;

	if(oneColor == 1){
		outFile << colorID << endl;
	}
	else{
		list<wstring>::iterator it;
		for(it = colorList1.begin(); it != colorList1.end(); ++it){
			outFile << it->c_str() << endl;
		}
	}
}
Список colorList1 содержит объекты wstring, которые представляют собой названия цветов. Первая часть кода до if(oneColor == 1) работает нормально, в файл записывается все что надо, дальше, когда oneColor == 0 в файл нужно записать содержимое списка colorList1, но этого не происходит и я не могу понять почему.
Trinock вне форума Ответить с цитированием
Старый 11.11.2011, 13:44   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Разве не так надо?
Код:
outFile << *it->c_str() << endl;
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 11.11.2011, 20:37   #3
Trinock
Пользователь
 
Регистрация: 19.09.2011
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Mandrivnyk Посмотреть сообщение
Разве не так надо?
Код:
outFile << *it->c_str() << endl;
Нет, итератор это же по сути указатель, поэтому обращение к методам объекта через него производится с помощью ->. Можно было бы написать (*it).c_str(), это по сути тоже самое было бы. Проблема не в этом, запись в файл все также не происходит.
Trinock вне форума Ответить с цитированием
Старый 11.11.2011, 21:37   #4
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

А зачем вы переводите в С-строку при записе? Для string же перегружен оператор вставки. Попробуйте так: (но проблема должна быть не в этом)
Код:
void Settings::PutDataIntoFile(LPWSTR fileName)
{
	wofstream outFile(fileName);
	
	outFile << *userName << endl
			<< speed << endl
			<< countOfIterations << endl
			<< saturation << endl
			<< winWidth << endl
			<< winHeight << endl
			<< config << endl
			<< oneColor << endl;

	if(oneColor == 1){
		outFile << colorID << endl;
	}
	else{
		list<wstring>::iterator it;
		for(it = colorList1.begin(); it != colorList1.end(); ++it){
			outFile << *it << endl;
		}
	}
}
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 11.11.2011, 22:32   #5
Trinock
Пользователь
 
Регистрация: 19.09.2011
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Syuf Посмотреть сообщение
А зачем вы переводите в С-строку при записе? Для string же перегружен оператор вставки. Попробуйте так: (но проблема должна быть не в этом)
Код:
void Settings::PutDataIntoFile(LPWSTR fileName)
{
	wofstream outFile(fileName);
	
	outFile << *userName << endl
			<< speed << endl
			<< countOfIterations << endl
			<< saturation << endl
			<< winWidth << endl
			<< winHeight << endl
			<< config << endl
			<< oneColor << endl;

	if(oneColor == 1){
		outFile << colorID << endl;
	}
	else{
		list<wstring>::iterator it;
		for(it = colorList1.begin(); it != colorList1.end(); ++it){
			outFile << *it << endl;
		}
	}
}
Если так, то у меня компилятор ругается, тоже непонятно почему, казалось бя для string должен быгь перегружен оператор <<. Хотя у меня используется не string а wstring, может дело в этом.
Trinock вне форума Ответить с цитированием
Старый 11.11.2011, 23:03   #6
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Trinock

во-первых, инклуды. string, fstream
во-вторых правильная запись выглядит так:

outFile << * it << std::endl;

в-третьих, проблема может быть в wofstream (зависит от компилятора)
стандартный фасет может "корежить" данные. подробнее - гоогле wofstream unicode characters facet
Rififi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему в конце, строки записанной в файл, появляется пробел? 8Observer8 Win Api 2 24.01.2011 17:32
не понятно почему прога закрывается Saka Помощь студентам 11 21.12.2009 23:55
Текстовый файл. Строки. Не понятно условие Angelwood Паскаль, Turbo Pascal, PascalABC.NET 10 05.06.2009 16:29
Теперь понятно почему мало пользуются поиском... Карась О форуме и сайтах клуба 9 03.03.2008 23:32