Idler |
Отправлено: 08.02.2005, 10:28 |
|
Не зарегистрирован
|
Мне надо считать текстовый файл в char* сразу целым блоком (по размеру файла).
FILE *f = fopen(fn, "r");
fgets(s, (int)FileSize, f);
/*Проблема: fgets — читает только до первого переноса строки, в том числе в режимах "rt", "rb", "r+"*/
int f = _open(... и т.д.
_read(...
/*Проблема: (некоторые символы ,например, '\n' (перенос строки) — в файле занимают 2 байта) _read — считывает в строку весь файл и за файлом разницу между кроличеством байтов и количеством символов*/
ifstream f1(fn1, ios::nocreate);
f1.read(s, fs);
/*считает только до конца файла, да еще в конце 0 ставит — ай маладца!*/
как еще можно решить эту задачу, и как решить проблемы?
есть ли не DOS-овские функции, я почему-то не нашел?
|
|
AVC |
Отправлено: 08.02.2005, 10:45 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Откройте файл в моде "rb" (или соответствующем аналоге) и будете читать все символы подряд.
Я люблю fread, с ним больше возни, зато приемлемая скорость. |
|
olegenty |
Отправлено: 08.02.2005, 11:04 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
по синтаксису и функциональным возможностям интерфейса больше нравится fstream, но эта штука не умеет корректно работать с unsigned char, как следствие — куча незаметных граблей при работе с отечественной кодировкой, независимо от того, 866 она, или 1251. я наступал — было неприятно. кроме того, некорректно работает с длинными путями с русскими символами (хотя, говорят, зависит от версии STLPort. последнюю поставить не смог, а встроенная в BCB глючит)
Лично для себя приближаюсь к мысли, что WinAPI рулит.
|
|
Gedeon |
Отправлено: 08.02.2005, 12:47 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Каждый раз могу делать по разному, м. сказать как в голову стукнет, но тоже больше всего люблю винапи.
|
|
Alex1000 |
Отправлено: 22.12.2005, 20:30 |
|
Не зарегистрирован
|
смотри хелп по функциям FileOpen, FileRead, FileWrite, FileClose |
|
|