Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Аналог fgets() в WinApi (http://forum.oszone.net/showthread.php?t=48650)

lehha 27-04-2005 13:58 319654

Аналог fgets() в WinApi
 
Всем привет
Есть ли в WinApi функция аналогичная fgets(), а то ReadFile() возращает то количество символов которе ей укажешь, не обрывая начала новой строки.
Спасибо зарание.

hasherfrog 28-04-2005 21:24 320113

Нет, насколько мне известно. ReadFile изначально заточена на буферизированный ввод, даже при отключении буфферизации там какая-то ерунда насчёт размера буфера (плохо помню). А почему Вы хотите обойтись без fgets? Это нормальная POSIX_стандартная функция.

lehha 29-04-2005 07:58 320181

hasherfrog
fgets() - работает с переменными типа FILE
Код:

char *fgets(      char *string,    int n,    FILE *stream  );
,
а я работаю с файлом с помощью CreateFile().

hasherfrog 30-04-2005 15:47 320649

Насколько я могу судить, придётся писать всё самому.
Ну или попробовать поискать в гугле готовый текст.
Есть 2 решения - читать по байту (медленно), или
организовать буфферизированное чтение с разбивкой (муторно).
Вам решать. У меня готового текста нет. к сжл. Как-то не приходилось...

lehha 03-05-2005 12:32 321182

Спасибо, писать дык писать :)

pva 04-05-2005 13:21 321544

Не понял в чём проблема? Уже написанным не хочется пользоваться? Если глубоко покопаться, то fgets() вконце-концов запускает ReadFile. То же самое могу сказать про istream<>. Можно, конечно, если хочется обойти использование FILE*, но сохранить способности istream<>, воспользоваться стандартными "твиками": определить класс, похожий на basic_streambuf<>, у которого virtual underflow() использует ReadFile и записать:

typedef basic_istream<char, my_streambuf<char> > winapi_istream;

Линкер выкинет всё, что не нужно, и в коде останется только простенький winapi_istream.


Время: 06:11.

Время: 06:11.
© OSzone.net 2001-