1 | |
Почему перестала работать запись в файл?09.05.2013, 16:42. Показов 1243. Ответов 17
Метки нет (Все метки)
Почему перестала работать запись в файл?
C++ #include <cstdio> #include <cstring> #include <iostream> #include <fstream> #include <vector> using namespace std; int main() { char c; ifstream in; ofstream out; vector <char> a; in.open("file.txt", ifstream::in); out.open("index.htm", ofstream::out | ofstream::app); string s = "\n" "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n" "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"ru\" lang=\"ru\">\n" "<head>\n" "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">\n" "<title>index</title>\n" "<style>\n" "body { font:9pt sans; padding:0px; margin:0px; line-height:18pt; background:#eee; color:#000; }\n" "</style>\n" "</head>\n" "<body>\n"; out.write(s.c_str(), s.size()); // цикл забивает массив 'a' символами из текстового файла while(in.good()) { c = in.get(); // чтение символа if(c=='\n') // меняет на "<br>" { a.push_back('<'); a.push_back('b'); a.push_back('r'); a.push_back('>'); } else if(c=='<') // меняет на "& # 6 0 ;" { a.push_back('&'); a.push_back('#'); a.push_back('6'); a.push_back('0'); a.push_back(';'); } else if(c=='>') // меняет на "& # 6 2 ;" { a.push_back('&'); a.push_back('#'); a.push_back('6'); a.push_back('2'); a.push_back(';'); } else { a.push_back(c); } // иначе забиваем остальными символами } // массив в строку, а строку в файл string str(a.begin(), a.end()-1); out.write(str.c_str(), a.size()); /*** ДАЛЬШЕ НЕ РАБОТАЕТ! ПОЧЕМУ? ***/ string e = "</body>\n</html>"; out.write(e.c_str(), e.size()); in.close(); out.close(); return 0; }
0
|
09.05.2013, 16:42 | |
Ответы с готовыми решениями:
17
Почему перестала работать Nvidia 9500 GT Немного изменил код программы и она перестала работать. Не пойму почему. Перестала работать дозапись в файл Перестала работать программа, не могу даже запустить файл .dpr |
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|||||||||||
09.05.2013, 16:53 | 2 | ||||||||||
0
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
09.05.2013, 17:11 | 3 |
А подумать? Я же указал где)
0
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
09.05.2013, 17:32 | 5 |
Близко но не совсем. Вернее можно но не красиво.
0
|
09.05.2013, 17:48 [ТС] | 6 |
Я сейчас нечаянно развею тут вашу повисшую в воздухе ауру загадочности -- программа работает, все дело во входном файле, который я использую, а почему программа с ним не работает не понятно, может быть какая-нибудь сигнатура в файле сбивает программу или размер файла слишком большой...
Добавлено через 1 минуту Нечего здесь думать, просто копирует на один символ меньше.
0
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
09.05.2013, 17:50 | 7 |
Вы уверены?))) Что будет если файл пустой? Каков результат a.end() - 1?
п.с. А я добавлю загадочности что если в файле кодировка не ASCII?
0
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|||||||||||
09.05.2013, 18:12 | 9 | ||||||||||
Это одно и тоже. Даже больше скажу у Вас не будет ошибки в std::vector<char> из-за обычного переполнения char.
Вы не пользуетесь дебаггером, жаль), и думать не хотите, вообще печаль)). закоментируйте это
0
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
09.05.2013, 18:22 | 11 |
Сколько?)
0
|
09.05.2013, 18:36 [ТС] | 12 |
Если входной файл выглядит так:
Код
123 456 789 Добавлено через 3 минуты Это когда конец строки линуксовый, а когда виндовсный то не 18, а 25 Добавлено через 2 минуты В Unicode тоже 18 Добавлено через 1 минуту Если смотреть через просмотрщик firefox то после 9 видно какую-то крякозябру.
0
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
09.05.2013, 18:40 | 13 |
В Вашем случае оно будет работать как при ASCSII так и при UTF-8.
Вопрос. Что в index.html? Я скомпилил и запустил у меня все работатет.
0
|
09.05.2013, 18:49 [ТС] | 14 |
В текстовом редакторе:
HTML5 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru"> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>index</title> <style> body { font:9pt sans; padding:0px; margin:0px; line-height:18pt; background:#eee; color:#000; } </style> </head> <body> 123 <br>456 <br>789 <br> HTML5 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru"> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>index</title> <style> body { font:9pt sans; padding:0px; margin:0px; line-height:18pt; background:#eee; color:#000; } </style> </head> <body> 123 <br>456 <br>789 <br> </body> </html> В текстовом редакторе видно что запись обрывается. Добавлено через 5 минут Сейчас попробую в виндовсе скомпилировать.
0
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
09.05.2013, 18:59 | 15 |
Сообщение было отмечено как решение
Решение
Уууу я понял теперь что Вы хотите. Почитайте
{ссылка удалена} или просо погуглите про перенос строки на разных платформах('\r\n' Win, '\n' Unix) и браузерах. И откройте ваш исходный файл так чтобы он показывал все спрятанные символы, я думаю там идте '\r\n' Вы убераете \n а браузеры обрабатывают оствшийся \r
0
|
11.05.2013, 12:33 [ТС] | 18 |
Решила проблему добавлением a.pop_back(); для удаления последнего элемента массива. Все стало работать как надо
C++ // ... a.push_back('2'); a.push_back(';'); } else { a.push_back(c); } // иначе забиваем остальными символами } a.pop_back(); // ЗДЕСЬ ! // массив в строку, а строку в файл string str(a.begin(), a.end()); // удалила единицу out.write(str.c_str(), a.size()); string e = "\n</body>\n</html>"; out.write(e.c_str(), e.size()); in.close(); out.close(); return 0; }
0
|
11.05.2013, 12:33 | |
11.05.2013, 12:33 | |
Помогаю со студенческими работами здесь
18
Почему не создаётся файл и не производится запись в пустой файл? Открытие, чтение и запись в файл, но работать в браузере:) Почему не происходит запись в файл? Почему не происходит запись в файл? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |