Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как прочитать/записать кусок файла весом больше 4 гб?

35K
25 февраля 2008 года
The Void
3 / / 25.02.2008
Здравствуйте!
Я программер начинающий, с VC ещё не работал...

Вот собственно задача:
Есть файл некоторого размера (допустим, 1 гб).
Нужно прочитать в буфер первый кусок, обработать, потом третий кусок, потом пятый, и т.д.
(Размер куска, к примеру, 4 мб)
И с записью тоже самое.

Помогите плз!
Заранее спасибо!
240
25 февраля 2008 года
aks
2.5K / / 14.07.2006
А в чем вопрос?
35K
25 февраля 2008 года
The Void
3 / / 25.02.2008
Какую функцию юзать и с какими параметрами?
я знаю fopen/fclose :D (ну там fputc, fgetc, fputs, fgets)
но там вроди ограничения на размер файла?
к тому же нада прочитать определённый кусок данных...
допустим 4194304-8388607 байты (вторые 4 мб)

http://forum.codenet.ru/showthread.php?t=15493 - там помоему такая же проблема, но так никто и не ответил...
240
25 февраля 2008 года
aks
2.5K / / 14.07.2006
Вобще ограничений как таковых нет. Только не fgetc тогда уж, а fwrite, fread.
Если же пишете под Windows - можно воспользоваться ее API для таких вещей:
CreateFile
ReadFileEx
WriteFileEx
SetFilePointerEx
353
25 февраля 2008 года
Nixus
840 / / 04.01.2007
Примерно так:
Код:
#include<stdio.h>

const long len = 4*1024*1024;

char buf[len];

int main()
{
    FILE *f = fopen("file.ext", "rb");

    if(f) {
        fseek(f, len, SEEK_SET);
        fread(buf, len, 1, f);
        fclose(f);
    }

    return 0;
}
505
25 февраля 2008 года
vAC
343 / / 28.02.2006
Странно как-то то "больше 4Гб", то "1Гб"...
Вот у меня как раз интерес к файлам >4Гб под Win,VC :)
Разумеется, такие файлы могут быть только в NTFS, запись и чтение можно делать впринципи любыми проедставленными выше методами плюс функции с целочисленным хэндлом (_write,_read) и STL.
В моей практике встречается такая ситуация, когда нужно переместить курсор по абсолютному смещению в файле. Для этого я использую функции типа *seeki64. А вот в реализации STL для VC насколько я понимаю такого не сделать, типы off_type и pos_type - 32-х битные. А хотелось бы использовать стандартную библиотеку...:( Можно ли что-нибудь придумать?
255
25 февраля 2008 года
Dart Bobr
1.4K / / 09.04.2004
Лучше пользуйся MMF(Memory Mapped Files) и не парься.
В частности:
CreateFileMapping
MapViewOfFile
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог