Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Считывание файла 
V
    Опции темы
Sergio
  Дата 8.9.2008, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

Репутация: нет
Всего: 1



Привет. Как правильно считать файл до конца?
Код

int currentPos =0;
int fileSize = GetFileSize("C:\\test.txt");

    while(bufferCurrentPos != fileSize)
    {
         DWORD bytesOfRead;

         strcpy(fileBuffer, "\0");
         ReadFile(hFile, fileBuffer, 255, NULL, NULL);

         currentPos += strlen(fileBuffer);    

         // Copy buffer to another place
     }

Проблема в том что "не выходит с цикла" даный код. Где я загнался? smile
Заранее спасибо.

Это сообщение отредактировал(а) Sergio - 8.9.2008, 21:15
PM MAIL ICQ   Вверх
Rpahut
Дата 8.9.2008, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 9.4.2006

Репутация: нет
Всего: 7



Переменные currentPos и bufferCurrentPos - это одно и то же?

Код

int currentPos =0;
int fileSize = GetFileSize("C:\\test.txt");

if(fileSize!=0xFFFFFFFF) { // проверяем чтоб не работать впустую
    while(currentPos < fileSize)
    {
         DWORD bytesOfRead;
         strcpy(fileBuffer, "\0"); // можно поменять на fileBuffer[0]='\0'; ?
         ReadFile(hFile, fileBuffer, 255, &bytesOfRead, NULL); // If lpOverlapped is NULL, lpNumberOfBytesRead cannot be NULL
         currentPos += bytesOfRead;    
         // Copy buffer to another place
     }
}


Вроде так. Я fread() юзаю smile 
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
Sergio
Дата 8.9.2008, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

Репутация: нет
Всего: 1



Rpahut, неправильно работает smile 
PM MAIL ICQ   Вверх
Rpahut
Дата 9.9.2008, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 9.4.2006

Репутация: нет
Всего: 7



Sergio, ты провайдеру за каждое отправленное слово платишь? smile Чо ты как партизан на допросе у фашистов.
Если по сути вопроса - то твой вариант не выходит из цикла, потому что переменная bufferCurrentPos в цикле не меняется.
Впрочем, если bufferCurrentPos и currentPos - одна и та же переменная (а такое бывает?), то меняется ее значение в строке
currentPos += strlen(fileBuffer);
и чо то я сомневаюсь, что стрлен здесь вернет правильный ответ.
Если мимо сути - запусти дебаггер и посмотри, что там происходит. Или, на худой конец, опиши как и где оно не работает.
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
bsa
Дата 9.9.2008, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Sergio
Код
DWORD fileSize = GetFileSize("C:\\test.txt");
if (fileSize != INVALID_FILE_SIZE) {
    DWORD currentPos = 0;
    while(1)
    {
         DWORD bytesOfRead;
//         strcpy(fileBuffer, "\0");   //совершенно бесполезная операция - ReadFile в случае успеха по любому перезапишет этот нуль.
         ReadFile(hFile, fileBuffer, 255, &bytesOfRead, NULL);
         if (bytesOfRead == 0)
              break; //выходим из цикла, если не удалось ничего прочитать
         currentPos += bytesOfRead;    

         // Copy buffer to another place
     }
}

PM   Вверх
Sergio
Дата 9.9.2008, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

Репутация: нет
Всего: 1



Всем спасибо. Проблему решил
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0437 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.