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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2014, 15:49   #1
FULEREN
Пользователь
 
Регистрация: 23.03.2012
Сообщений: 56
По умолчанию Построчное чтение из файла. Winapi. Си.

Доброго времени суток форумчане. Нужно построчно читать в буфер содержимое текстового файла. (без использования стандартных библиотек, тобишь только средствами winapi) Пробовал побайтово через SetFilePointer + ReadFile (файл в ansi) в цикле do - while пока не встретим '\n' или '\r', но что то не получилось... помогите разобраться. Пишу на Си. Заранее благодарен за любой ответ.
FULEREN вне форума Ответить с цитированием
Старый 22.08.2014, 17:10   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Ну, показывайте как пробовали и что не получалось.
Хотя метод довольно странный конечно - лучше читать блоками и без SetFilePointer.
waleri вне форума Ответить с цитированием
Старый 22.08.2014, 18:23   #3
FULEREN
Пользователь
 
Регистрация: 23.03.2012
Сообщений: 56
По умолчанию

Код:
int i = 0;
do {
  SetFilePointer( hOpenFile, i, 0, 0 );
  ReadFile( hOpenFile, &szSymbols, 1, &dwCount, 0 );
  szSymbol[0] == szBuffer[i];
  i++;
} while ( szSymbol[0] != '\r' || szSymbol[0] != '\n' );
Сильно не пинайте, только сел изучать Си.
FULEREN вне форума Ответить с цитированием
Старый 22.08.2014, 20:03   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

szSymbol[0] == szBuffer[i];

Аргументы надо поменять местами и использовать оператор присваивания = вместо оператор сравнения ==

Неплохо проверят i на предмет выхода за пределы массива.
waleri вне форума Ответить с цитированием
Старый 22.08.2014, 20:18   #5
FULEREN
Пользователь
 
Регистрация: 23.03.2012
Сообщений: 56
По умолчанию

Моя невнимательность, каюсь. Но код все равно не работает. Привожу полный код программы.
Код:
#include <windows.h>

int Main(){
TCHAR szBuffer[128];
TCHAR szSymbol[2];
DWORD dwCount;
HANDLE hOpenFile = CreateFile( "text.txt", GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 );
int i = 0;

do {
  SetFilePointer( hOpenFile, i, 0, 0 );
  ReadFile( hOpenFile, &szSymbol, 1, &dwCount, 0 );
  szBuffer[i] = szSymbol[0];
  i++;
} while ( szBuffer[i] != '\r' || szBuffer[i] != '\n' );

MessageBox( 0, szBuffer, szBuffer, 0 );

CloseHandle( hOpenFile );
ExitProcess(0);
}

Последний раз редактировалось FULEREN; 22.08.2014 в 20:22.
FULEREN вне форума Ответить с цитированием
Старый 22.08.2014, 20:24   #6
FULEREN
Пользователь
 
Регистрация: 23.03.2012
Сообщений: 56
По умолчанию

Если есть какие то более "правильные" способы реализации построчного чтения, то я буду только рад их узнать, ибо это первое что пришло в голову.
FULEREN вне форума Ответить с цитированием
Старый 23.08.2014, 09:59   #7
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Код:
while ( szBuffer[i] != '\r' || szBuffer[i] != '\n' );

Тут наверно надо &&

Кстати, вызов SetFilePointer излишен.
Неплохо проверять на предмет возникновения ошибок.
Например что будет, если файл нельзя открыть?

Последний раз редактировалось waleri; 23.08.2014 в 10:01.
waleri вне форума Ответить с цитированием
Старый 23.08.2014, 10:33   #8
FULEREN
Пользователь
 
Регистрация: 23.03.2012
Сообщений: 56
По умолчанию

Проверку я прикручу. SetFilePointer убрал, сейчас хочу просто получить строку и вывести ее в MessageBox. Не выводит... что делать без поняти.
FULEREN вне форума Ответить с цитированием
Старый 23.08.2014, 10:42   #9
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от FULEREN Посмотреть сообщение
что делать без поняти.
Подумать, что содержит szBuffer[i] в момент проверки в цикле while и почему.
waleri вне форума Ответить с цитированием
Старый 23.08.2014, 16:25   #10
FULEREN
Пользователь
 
Регистрация: 23.03.2012
Сообщений: 56
По умолчанию

Проблема решена. Большое спасибо.
FULEREN вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Php. Построчное чтение из файла в массив Leshiy80 PHP 9 30.10.2014 12:45
Построчное чтение из файла используя TStringList Guneska Помощь студентам 6 02.03.2013 18:07
Построчное чтение переменных из файла biohazard120 Общие вопросы C/C++ 2 04.12.2012 18:42
PL/SQL, построчное чтение txt файла seriousMalish SQL, базы данных 0 09.06.2010 21:31
Построчное чтение из файла Mihalich1988 Общие вопросы C/C++ 5 17.12.2008 02:10