Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ReadFile 
:(
    Опции темы
PRF
Дата 14.3.2009, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте. Знаю, что тем с таким содержанием много уже, но вот что хотел спросить. Подскажите пожалуйста второй параметр в ReadFile это та переменная куда считываем информацию из файла. А как мне весь файл в эту переменную считать? ну у меня получается только один символ считать в переменную char. А как все содержимое считать сразу? или только по символьно?
Код

    char h;
    DWORD count;
    HANDLE hFile = CreateFile("about.html",GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_READONLY,0);
    
    ReadFile(hFile, &h, sizeof(h), &count, 0); 


Вот у меня char переменная , соответственно один символ, а как сразу все считать?

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


Эксперт
***


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

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



PRF, 
1 вариант (Индусский):
сделать столько переменных, каков размер файла
например, если размер файла 1000 байт, то
Код
char h1;
char h2;
...
char h1000;

ReadFile(hFile, &h1, sizeof(h1), &count, 0); 
ReadFile(hFile, &h2, sizeof(h2), &count, 0); 
...
ReadFile(hFile, &h1000, sizeof(h1000), &count, 0); 
(((:

2 вариант:
узнать размер файла программно и сделать в цикле побайтовое чтение
Код
LARGE_INTEGER sz;
GetFileSizeEx(sz);
for(LONGLONG i=0; i<sz.QuadPart; i++)
    ReadFile(hFile, &h, sizeof(h), &count, 0);


3 вариант:
узнать размер файла программно и считать содержимое (полностью, или частично) файла в буфер
Код
GetFileSizeEx...
const size_t bufLen = ...
unsigned char* buf = new unsigned char [bufLen];
ReadFile(hFile, buf, bufLen, &count, 0);
...
delete [] buf, buf = NULL;


Это сообщение отредактировал(а) Rififi - 14.3.2009, 15:29
PM MAIL   Вверх
PRF
Дата 14.3.2009, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо большое) очень выручили)
PM MAIL   Вверх
PRF
Дата 16.3.2009, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А можно еще вопросик. Вот я начал делать по 3 способу 

Код

LARGE_INTEGER sz;
GetFileSizeEx(hFile, &sz);
char* buf = new char [bufLen];
ReadFile(hFile, buf, sz.QuadPart, &count, 0);


То он считывает только до разделителя, ну вообще в разных файлах по разному, где то полностью считывает, а где то встретит нулевый символ (похоже) и прекращает считывание.. В чем проблема? заранее спасибо.
PM MAIL   Вверх
Alca
Дата 16.3.2009, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

То он считывает только до разделителя

А как ты это вычислил?


--------------------
PM WWW ICQ Skype Jabber   Вверх
PRF
Дата 16.3.2009, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ну смотрел просто.. вот у меня допустим есть файл doc, открыл я его notepad++ и посмотрел, там n - количество символов, что и записывается в sz.QuadPart (сюда записывается правильно, столько символов сколько в файле). 
Вот допустим первая строка это доковского файла:
РПаЎ±б>NULL(так notepad++ отображает этот символ) и все что до NULL он считывает , а все дальше него НЕТ. ну вот примерно это я имел ввиду, хотя передаю считать sz.QuadPart (Все символы из файла) .. 
PM MAIL   Вверх
Alca
Дата 16.3.2009, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



код? как записывал в файл?

Это сообщение отредактировал(а) Alca - 16.3.2009, 23:38


--------------------
PM WWW ICQ Skype Jabber   Вверх
PRF
Дата 16.3.2009, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



чего код.. вот мой код


Код

    HANDLE hFile = CreateFile("doc\\5.doc", GENERIC_READ,  0, 0,  OPEN_EXISTING,  FILE_ATTRIBUTE_READONLY, 0);

    LARGE_INTEGER sz;
    GetFileSizeEx(hFile, &sz);

        DWORD count;
    char* text = new char[sz.QuadPart];

    ReadFile(hFile, text, sz.QuadPart, &count, 0);

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


Эксперт
****


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

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



а так?
Код

unsigned char* text = new unsigned char[sz.QuadPart];



--------------------
PM WWW ICQ Skype Jabber   Вверх
PRF
Дата 16.3.2009, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Нет, пробовал уже. Если считывать в цикле посимвольно , то все нормально, но так долго очень при больших файлах, поэтому и хочу сделать сразу считывание.
PM MAIL   Вверх
Alca
Дата 16.3.2009, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



а при чем здесь?
Цитата

открыл я его notepad++ и посмотрел


Добавлено через 2 минуты и 46 секунд
а открой в hex-редакторе и глянь


--------------------
PM WWW ICQ Skype Jabber   Вверх
PRF
Дата 16.3.2009, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



да просто проверил все считал или нет. Ну мне нужно это. Просто вот после разделителя не считывает таким способом, таким же посимвольно в цикле нормально все, все так как нужно.. А так нет.
PM MAIL   Вверх
Alca
Дата 16.3.2009, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



как ты в файл записывал, прочитанное?


--------------------
PM WWW ICQ Skype Jabber   Вверх
PRF
Дата 16.3.2009, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



потоком.. ты думаешь , что у меня не все записывается, не.. я пошагово еще делал, смотрел что он ему присваивает .. ну f10 ) и смотрел что будет в text после функции readfile , вот то что до пробела и есть.. а записывал так

Код

ofstream write("bigramm.txt");
write << text;

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


Эксперт
****


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

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



Код

ofstream write("bigramm.txt");
write << std::string(text, sz.QuadPart);



--------------------
PM WWW ICQ Skype Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


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

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


 




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


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

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