2013-10-08 9 views
1

У меня возникла проблема, когда ftell возвращает неправильное значение. Мой код при правильном запуске в netbeans в отчетах linux, но тот же самый код, запущенный в netbeans на Windows (с использованием mingw), сообщает неправильно. указатель файла - файл, открытый в BINARY_READ. в моем linux netbeans, после запуска моей подпрограммы, ftell сообщает 35. В моих netbeans-окнах, после вызова той же подпрограммы, ftell равен 3621. Я проследил через свою подпрограмму, и следующая проблема возникает, чтобы вызвать проблему:ftell возвращает неправильное значение

if (((header_size = getc (fp)) == EOF) || (header_size == 0)) 

на моем Линукс NetBeans, то ftell (Fp) после того, как это приводит заявление в 1. но на моих окнах NetBeans, то ftell (FP), после этого заявления 3585.

, что может быть причиной проблемы?

+0

Вы открыли файл с режимом «b»? –

+0

Oh Snap .. Я неправильно определил для READ_BINARY и WRITE_BINARY. Они были «r» и «w» соответственно вместо «rb» и «wb». благодаря –

ответ

5

Вам нужно открыть файл в двоичном режиме:

fp = fopen(name, "rb"); 

или аналогичный. Вы должны привыкнуть всегда делать это, поскольку только двоичный режим имеет четко определенное поведение в стандартном C. В системах POSIX двоичный и текстовый (по умолчанию) режим ведут себя одинаково, но в окнах перемещение строк новой строки происходит в способ, который испортил содержимое файла и смещения.

0

Обратите внимание, что эта проблема может не иметь ничего общего с бинарными файлами, это может быть вызвано тем, что даже 64-битные машины Windows имеют длину 4 байта, тогда как в 64-разрядных системах Linux длина может быть либо 4 байта, либо 8 байтов ,

Поскольку ftell возвращается долго, под окнами максимальный файл, который вы можете прочитать, составляет 2 ГБ. В то время как под Linux это выше.

Фокус под окнами заключается в использовании _ftelli64() вместо ftell(), тогда у вас будет доступ к 64-битной версии.

 Смежные вопросы

  • Нет связанных вопросов^_^