[C++] fstream и ещё
1) вот список операторов, связанных с fs (в порядке их вызова):
fs.open(filename);
fs.unsetf(ios::skipws);
чтение из потока
fs.seekg(-1, ios::cur);
fs.tellg;
чтение из потока
fs.close;
2) просто связка open/чтение/close работает нормально
как заставить стримы работать с большими файлами? больше 3 гигов.
в С это получается делать (fopen\fopen64).
Но хотелось бы узнать, как пользоваться этим tellg
имею вопрос!
string к верхнему регистру?
{
ch = toupper ( ch ) ;
}
...
for_each ( str . begin ( ) , str . end ( ) , myupper ) ;
...
куда вне очереди?!
разойдитесь!
вопрос уже представлен выше!
жду ответа!
2) Про верхний регистр -- это FAQ, и довольно не праздный, поскольку возникает вопрос: в верхний регистр согласно какой кодировке? Насколько я помню, страуструп в конце книги пишет об этом. Если надо, могу поискать еще ссылок на бумажную литературу.
в верхний регистр согласно какой кодировке?кодировка не важна - язык аглицкий (на всякий случай - cp1251)
страуструп в конце книги пишет об этом.
спасибо, посмотрю
P.S. просто очень долго не мог поверить, что нет чего-нибудь готового
в том же string
Сделал с использованием ch=toupper(ch);
используй boost
вопрос все еще открыт!
вопрос воспроизведу: как заставить стримы работать с большими файлами (> 3 Гигобайт) ?
Как-как, напиши свои, 3Гб - ограничение платформы, вот и поднапрягись
fopen работает с большими файлами.
fstream - это не только fopen, чуве.
еще раз повторяю для танкистов: что дополнительно надо включить\отключить, чтобы при чтении\записи файлов посредством стримов можно было работать с большими файлами? если есть вообще такие рычаги в стримах. для Си проблем нет, но не хочется пользоваться fopen64 для таких целей.
а -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 не помогают?
в си помогает, в стримах-нет
флуд не принимается !
си++ сосет у си! я в шоке!
возьми правильную реализацию stl-я, например, StlPort и не дергайся.
ясно
всем спасибо.
а -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 не помогают?
а ты попробуй использовать эти опции при компиляции стандартной библиотеки C++ (в составе GCC)
в си помогает, в стримах-нет
ну и конечно позднее при компиляции своих прог
Либо поможет (скорее всего или реализация стандартной библиотеки - полное дерьмо.
PS: насчет гугла, прав
значит реально сосет си++ ;(причем здесь вообще C++
Если какая-то одна реализация стандартной библиотеки (или компилятора) сосет - это не означает, что язык программирования сосет.
Но имхо, все таки C++ сосет у C просто офигенно. (только разумеется fstream здесь не причем).
fopen64 - это нестандартное фуфло, которое использовать неприлично (лучше системные вызовы тогда уж).
Но fopen тоже должен работать с большими файлами, а если не работает, то такая реализация стандартной библиотеки не меньший отстой, чем плохой fstream у C++.
Но fopen "
fopen64 та же самая дрянь, что и fopen.
насчет гугла-сами полезайте и найдите что-нибудь, если сможете.
мне достаточно было изучение сырцов STL от трех компиляторов CC, gcc и VS2005, чтобы понять тупиковость этой проблемы. В последней вроде есть какие-то рычаги (тип streampos вроде можно менять) , но никак несовместимые с юнихами. В юнихах streampos имеет конкретный тип long.
Мне проще fopen использовать, чем таскать за собой танк StlPort.
всем спасибо, все свободны.
Оставить комментарий
Garryss
Пытаюсь использовать iostream/fstream.Программа компилируется, но вылетает по SIGSEGV:
если пользоваться этим
то ошибка происходит при попытке выполнить fs.close в деструкторе (fs - типа ifstream)
а в этом случае - при попытке вызвать fs.tellg хотя чтение из потока и вызов
fs.seekg(-1, ios::cur) отрабатывают нормально
В чем может быть ошибка?