Проблема с записью/чтением файлов
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Возникла у меня тут такая проблема - не читаются до конца файлы больше ~16 Kb, причём любым способом. Если использую fread, то читается только кусок размером эти самые ~16 Kb, а если последовательно fgetc'ем, то тоже читает только кусок, а потом ошибку выдаёт и закрывает прогу. Аналогичная фигня с записью.
Использую Borland C++ 3.1 , под DOS.
Использую Borland C++ 3.1 , под DOS.
Код реализации чтения/записи в студию.
*provided AS IS
Код: Выделить всё
#include "io.h"
#include "stdio.h"
void main ()
{
FILE *HNDL = fopen( "some.txt" , "rb" );
FILE *NEW = fopen( "new.txt" , "wb" );
unsigned long L = filelength( fileno( HNDL ) );
char *DATA = new char[L];
for ( unsigned long i = 0 ; i < L ; i++ )
{
DATA[i] = fgetc( HNDL );
fputc( DATA[i] , NEW );
}
fclose( HNDL );
fclose( NEW );
}
nucer писал(а):Код: Выделить всё
#include "io.h" #include "stdio.h" void main (] Да хоть такой.[/quote] Странно, у меня этот код работает в лучшем виде!
Я только с размером наврал маленько, глюки при размере ~>60 Kb. А глюк такой, что не работает вот этот вот кусок , то бишь проблемы с таким размером массива.
Код: Выделить всё
DATA[i] = fgetc( HNDL );
Под DOS имеется проблема с адресацией блоков данных длиной > 64K. Попробуй добавить __huge в объявление указателя или используй соотвествующую модель памяти.глюки при размере ~>60 Kb
И еще: не читай файл побайтово - очень неэффективно. Пользуйся fread.
-
- Сообщения: 35
- Зарегистрирован: 12 май 2004, 15:34
- Откуда: Москва
Разве DOS в сосотянии за раз обработать что-то большее 64к? Вроде ему адресация не должна это позволить никаким образом.
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Если использовать спецсредства для работы с указателями, то можно.Разве DOS в сосотянии за раз обработать что-то большее 64к? Вроде ему адресация не должна это позволить никаким образом.
2B OR NOT(2B) = FF
2Absurd И что же это за средства?
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
nucer, не слышал про far указатели? :-) Это когда переменная хранит не только смешение в сегменте, но и адрес сегмента.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.