Проблема с записью/чтением файлов

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

nucer
Сообщения: 4
Зарегистрирован: 23 май 2004, 17:01
Откуда: Москва
Контактная информация:

Возникла у меня тут такая проблема - не читаются до конца файлы больше ~16 Kb, причём любым способом. Если использую fread, то читается только кусок размером эти самые ~16 Kb, а если последовательно fgetc'ем, то тоже читает только кусок, а потом ошибку выдаёт и закрывает прогу. Аналогичная фигня с записью.
Использую Borland C++ 3.1 , под DOS.
Andy
Сообщения: 238
Зарегистрирован: 17 фев 2004, 08:15
Откуда: Минск

Код реализации чтения/записи в студию.
*provided AS IS
nucer
Сообщения: 4
Зарегистрирован: 23 май 2004, 17:01
Откуда: Москва
Контактная информация:

Код: Выделить всё

#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 );
}
Да хоть такой.
subver
Сообщения: 7
Зарегистрирован: 19 май 2004, 07:10
Откуда: Омск
Контактная информация:

nucer писал(а):

Код: Выделить всё

#include "io.h"
#include "stdio.h"
void main &#40]
Да хоть такой.[/quote]

Странно, у меня этот код работает в лучшем виде!
nucer
Сообщения: 4
Зарегистрирован: 23 май 2004, 17:01
Откуда: Москва
Контактная информация:

Я только с размером наврал маленько, глюки при размере ~>60 Kb. А глюк такой, что не работает вот этот вот кусок

Код: Выделить всё

DATA[i] = fgetc( HNDL );
, то бишь проблемы с таким размером массива.
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

глюки при размере ~>60 Kb
Под DOS имеется проблема с адресацией блоков данных длиной > 64K. Попробуй добавить __huge в объявление указателя или используй соотвествующую модель памяти.

И еще: не читай файл побайтово - очень неэффективно. Пользуйся fread.
Конструктор
Сообщения: 35
Зарегистрирован: 12 май 2004, 15:34
Откуда: Москва

Разве DOS в сосотянии за раз обработать что-то большее 64к? Вроде ему адресация не должна это позволить никаким образом.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Разве DOS в сосотянии за раз обработать что-то большее 64к? Вроде ему адресация не должна это позволить никаким образом.
Если использовать спецсредства для работы с указателями, то можно.
2B OR NOT(2B) = FF
nucer
Сообщения: 4
Зарегистрирован: 23 май 2004, 17:01
Откуда: Москва
Контактная информация:

2Absurd И что же это за средства?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

nucer, не слышал про far указатели? :-) Это когда переменная хранит не только смешение в сегменте, но и адрес сегмента.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить