Страница 1 из 2

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

Добавлено: 23 май 2004, 17:18
nucer
Возникла у меня тут такая проблема - не читаются до конца файлы больше ~16 Kb, причём любым способом. Если использую fread, то читается только кусок размером эти самые ~16 Kb, а если последовательно fgetc'ем, то тоже читает только кусок, а потом ошибку выдаёт и закрывает прогу. Аналогичная фигня с записью.
Использую Borland C++ 3.1 , под DOS.

Добавлено: 23 май 2004, 18:25
Andy
Код реализации чтения/записи в студию.

Добавлено: 23 май 2004, 20:24
nucer

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

#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 );
}
Да хоть такой.

Добавлено: 24 май 2004, 08:13
subver
nucer писал(а):

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

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

Странно, у меня этот код работает в лучшем виде!

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

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

DATA[i] = fgetc( HNDL );
, то бишь проблемы с таким размером массива.

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

И еще: не читай файл побайтово - очень неэффективно. Пользуйся fread.

Добавлено: 24 май 2004, 18:19
Конструктор
Разве DOS в сосотянии за раз обработать что-то большее 64к? Вроде ему адресация не должна это позволить никаким образом.

Добавлено: 24 май 2004, 18:33
Absurd
Разве DOS в сосотянии за раз обработать что-то большее 64к? Вроде ему адресация не должна это позволить никаким образом.
Если использовать спецсредства для работы с указателями, то можно.

Добавлено: 24 май 2004, 20:03
nucer
2Absurd И что же это за средства?

Добавлено: 24 май 2004, 21:21
Romeo
nucer, не слышал про far указатели? :-) Это когда переменная хранит не только смешение в сегменте, но и адрес сегмента.