Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с readfile, прочесть файл с заранее неизвестной длин 
:(
    Опции темы
nitrikc
  Дата 10.5.2011, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



void __fastcall TForm1::N1Click(TObject *Sender)
{BOOL ReadFile(
HANDLE hFile,
LPVOID lpBuffer,
DWORD nNumberOfBytesToRead,
LPDWORD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped);
HANDLE hFile;DWORD dw;LPVOID arr;
char *file_name;
if(OpenDialog1->Execute())
{
 file_name=OpenDialog1->FileName.c_str();
 FILE *file;
 file = fopen( file_name, "r" );

if( file == 0 )
{ShowMessage("Ôàéë íå íàéäåí");}
else
{hFile=file_name;
do {
unsigned long size=GetFileSize(file_name,NULL);
Edit1->Text=size;
char* arr;//=(char*)VirtualAlloc(NULL,size,MEM_COMMIT,PAGE_READWRITE);
ReadFile(hFile,arr,size,&dw,NULL);                                                                                 //ругается
} while (EOF==1) ; // ïîêà îí íå ðàâåí ñèìâîëó êîíöà ñòðîêè
Memo1->Text=file_name;
fclose(file);
}}
else
return ;
}
вот часть программы. не могу понять в чем ошибка. извиняюсь за оформление smile 
PM MAIL   Вверх
borisbn
Дата 10.5.2011, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Цитата(nitrikc @  10.5.2011,  16:32 Найти цитируемый пост)
file_name=OpenDialog1->FileName.c_str();

так делать нельзя, т.к. FileName создаёт временный объект AnsiString, который после этой строчки не жилец. Нужно так
Код

AnsiString file_name = OpenDialog1->FileName;
FILE *file;
file = fopen( file_name.c_str(), "r" );

Цитата(nitrikc @  10.5.2011,  16:32 Найти цитируемый пост)
hFile=file_name;

это ещё что ???
hFile - HANDLE
file_name - char*

Цитата(nitrikc @  10.5.2011,  16:32 Найти цитируемый пост)
char* arr;//=(char*)VirtualAlloc(NULL,size,MEM_COMMIT,PAGE_READWRITE);

зачем заремил ? было всё правильно. хотя лучше
Код

char * arr = new char[ size ];

только потом (в конце) не забудь сделать ему delete []arr;

Цитата(nitrikc @  10.5.2011,  16:32 Найти цитируемый пост)
} while (EOF==1) ; // ïîêà îí íå ðàâåí ñèìâîëó êîíöà ñòðîêè

зачем do...while, если ты собираешься читать весь файл одним блоком ?

Цитата(nitrikc @  10.5.2011,  16:32 Найти цитируемый пост)
 извиняюсь за оформление

выделяешь код и нажимаешь кнопку "Код" сверху справа над полем редактирования

Это сообщение отредактировал(а) borisbn - 10.5.2011, 17:53


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
nitrikc
Дата 11.5.2011, 03:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 smile спасибо за подробное объяснение ошибок. hFile ... а как указать на открытый файл?
>>>>>>>>>>>>>>зачем do...while, если ты собираешься читать весь файл одним блоком ?
потом сделаю что бы блоками. тестить хочу на маленьких файлах. потом в поток хочу переделать. smile 
PM MAIL   Вверх
borisbn
Дата 11.5.2011, 06:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



> hFile ... а как указать на открытый файл
Нужно пользоваться одним набором функций для открытия/чтения/закрытия. Либо CreateFile/ReadFile/CloseHandle либо fopen/fread/fclose
Почитай про эти ф-ции. В их описании есть примеры использования


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
xvr
Дата 11.5.2011, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Конструкция (EOF==1) тождественно равна false.
Рекомендую почитать букварь по С  smile 

PM MAIL   Вверх
nitrikc
Дата 12.5.2011, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а getfile можно использовать? 
PM MAIL   Вверх
borisbn
Дата 12.5.2011, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



WTF is getfile?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
nitrikc
Дата 12.5.2011, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



опечатался getline. чтобы файл целиком прочитать.
PM MAIL   Вверх
volatile
Дата 13.5.2011, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

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



Цитата(nitrikc @  12.5.2011,  23:52 Найти цитируемый пост)
опечатался getline. чтобы файл целиком прочитать. 

ЗАЧЕМ ??
вам же сказали какие функции использовать.
Или нормальные герои всегда идут в обход?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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