Загрузка в память "большого" файла
От: slash_48rus  
Дата: 28.08.06 20:56
Оценка:
Хай всем. Пишу вроде не первый год на си, но че-то седня возникла проблемка... Имеется файл, состоящий из множества бмп файлов, записанных в нем друг за другом. Мне это дело надо запхать в память (массив). Файл около 12 метров, массив сделан на 32. Пишу следующее%

FILE *fp1, fp2;

unsigned int dump[33554432];
fp1 = fopen ("dump.bmp", "r");
fp2 = fopen ("out.tmp", "w");

unsigned int i = 0;
char c;

while (!feoef(fp1))
{
c = fgetc(fp1);
dump[i] = c;
fputc (c, fp2);
fflush (fp2);// на всякий...
i++;
}
fclose(...);

Все! Злосчастные 12 метров никак у мя не выходят, иногда бОльшая часть файла заполняется 0хF-ками. Куда копать, подскажите плиииз, а то срочно надо...

ЗЫ: тип массива попробую ща поменять, но не уверен что заработает
Re: Загрузка в память "большого" файла
От: apple-antonovka  
Дата: 28.08.06 21:50
Оценка:
_>unsigned int dump[33554432];
_>fp1 = fopen ("dump.bmp", "rb");
_>fp2 = fopen ("out.tmp", "wb");

А вообще стоит наверно пооптимальнее както сделать... Если под конкретную ос — заюзать ее механизм отображения файлов в память... Или читать как нить не по 1 байту
Re: Загрузка в память "большого" файла
От: volk  
Дата: 28.08.06 22:43
Оценка:
Здравствуйте, slash_48rus, Вы писали:

_>Хай всем. Пишу вроде не первый год на си, но че-то седня возникла проблемка... Имеется файл, состоящий из множества бмп файлов, записанных в нем друг за другом. Мне это дело надо запхать в память (массив). Файл около 12 метров, массив сделан на 32. Пишу следующее%


Мда. Автор пишет на Си не первый год, а нулевой.


FILE *fp1, *fp2;

unsigned int dump[33554432]; //Что это? Твой ИНН? 32М = 32 * 1024*1024 или 1<<25
fp1 = fopen ("dump.bmp", "rb"); 
fp2 = fopen ("out.tmp", "wb");
//В программе куча опечаток, но проблема, скорее всего, в этих самых буквах 'b'

unsigned int i = 0;
char c;

while (!feof(fp1))
{
   c = fgetc(fp1);
   dump[i] = c; //не объявлено...
   fputc (c, fp2);
   fflush (fp2);// на всякий... Не надо так делать!
   i++;
}
fclose(...);
Тот, кто желает, но не делает, распространяет чуму.
Re: Загрузка в память "большого" файла
От: v_m  
Дата: 29.08.06 04:08
Оценка:
29 августа 2006 00:56 slash_48rus wrote:

> Хай всем. Пишу вроде не первый год на си, но че-то седня возникла

> проблемка... Имеется файл, состоящий из множества бмп файлов, записанных в
> нем друг за другом. Мне это дело надо запхать в память (массив). Файл
> около 12 метров, массив сделан на 32. Пишу следующее%
>
> FILE *fp1, fp2;
>
> unsigned int dump[33554432];
> fp1 = fopen ("dump.bmp", "r");
> fp2 = fopen ("out.tmp", "w");
>
> unsigned int i = 0;
> char c;
>
> while (!feoef(fp1))
> {
> c = fgetc(fp1);
> dump[i] = c;
> fputc (c, fp2);
> fflush (fp2);// на всякий...
> i++;
> }
> fclose(...);
>
> Все! Злосчастные 12 метров никак у мя не выходят, иногда бОльшая часть
> файла заполняется 0хF-ками. Куда копать, подскажите плиииз, а то срочно
> надо...
>
> ЗЫ: тип массива попробую ща поменять, но не уверен что заработает
Ты ложишь char в неинициализированный int.
Posted via RSDN NNTP Server 2.0
Re[2]: Загрузка в память "большого" файла
От: trophim Россия  
Дата: 29.08.06 19:16
Оценка:
Здравствуйте, volk, Вы писали:

V>Здравствуйте, slash_48rus, Вы писали:


_>>Хай всем. Пишу вроде не первый год на си, но че-то седня возникла проблемка... Имеется файл, состоящий из множества бмп файлов, записанных в нем друг за другом. Мне это дело надо запхать в память (массив). Файл около 12 метров, массив сделан на 32. Пишу следующее%


V>Мда. Автор пишет на Си не первый год, а нулевой.


Эт что... Видели б вы как у нас студент подсчитывал размер файла. Ага, fgetc считал.
[EOF]
Let it be! — Давайте есть пчелу!
Re: Загрузка в память "большого" файла
От: dotidot Россия  
Дата: 30.08.06 12:02
Оценка:
Здравствуйте, slash_48rus, Вы писали:


_>unsigned int dump[33554432];


ээээ, а так можно? со стеком ниче не будет? мож лучше такие объемы динамически распределять?
Re: Загрузка в память "большого" файла
От: Аноним  
Дата: 30.08.06 15:57
Оценка: +1
Здравствуйте, slash_48rus, Вы писали:

_>Хай всем. Пишу вроде не первый год на си, но че-то седня возникла проблемка... Имеется файл, состоящий из множества бмп файлов, записанных в нем друг за другом. Мне это дело надо запхать в память (массив). Файл около 12 метров, массив сделан на 32. Пишу следующее%


_>FILE *fp1, fp2;


_>unsigned int dump[33554432];

_>fp1 = fopen ("dump.bmp", "r");
_>fp2 = fopen ("out.tmp", "w");

_>unsigned int i = 0;

_>char c;

_>while (!feoef(fp1))

_>{
_> c = fgetc(fp1);
_> dump[i] = c;
_> fputc (c, fp2);
_> fflush (fp2);// на всякий...
_> i++;
_>}
_>fclose(...);

_>Все! Злосчастные 12 метров никак у мя не выходят, иногда бОльшая часть файла заполняется 0хF-ками. Куда копать, подскажите плиииз, а то срочно надо...


_>ЗЫ: тип массива попробую ща поменять, но не уверен что заработает

По-моему кто-то над кем-то решил поиздеваться... Почти в каждой строчке ошибка/глупость
Или это олимпиада по "странному" программированию?
Re[3]: Загрузка в память "большого" файла
От: volk  
Дата: 30.08.06 20:43
Оценка:
Здравствуйте, trophim, Вы писали:

T>Здравствуйте, volk, Вы писали:


V>>Здравствуйте, slash_48rus, Вы писали:


_>>>Хай всем. Пишу вроде не первый год на си, но че-то седня возникла проблемка... Имеется файл, состоящий из множества бмп файлов, записанных в нем друг за другом. Мне это дело надо запхать в память (массив). Файл около 12 метров, массив сделан на 32. Пишу следующее%


V>>Мда. Автор пишет на Си не первый год, а нулевой.


T>Эт что... Видели б вы как у нас студент подсчитывал размер файла. Ага, fgetc считал.


Тю! Чего же здесь оригинального? Вот я ( ) в свое время определял размер файла так: вызывал fread, передавал ему огргмный буфер и смотрел на возвращаемое значение.

Эх, молодость, молодость... (с) Поручик Ржевский.
Тот, кто желает, но не делает, распространяет чуму.
Re[4]: Загрузка в память "большого" файла
От: Vladimir D Belousov Россия  
Дата: 30.08.06 22:40
Оценка:
Здравствуйте, volk, Вы писали:

V>Здравствуйте, trophim, Вы писали:


T>>Здравствуйте, volk, Вы писали:


V>>>Здравствуйте, slash_48rus, Вы писали:


_>>>>Хай всем. Пишу вроде не первый год на си, но че-то седня возникла проблемка... Имеется файл, состоящий из множества бмп файлов, записанных в нем друг за другом. Мне это дело надо запхать в память (массив). Файл около 12 метров, массив сделан на 32. Пишу следующее%


V>>>Мда. Автор пишет на Си не первый год, а нулевой.


T>>Эт что... Видели б вы как у нас студент подсчитывал размер файла. Ага, fgetc считал.


V>Тю! Чего же здесь оригинального? Вот я ( ) в свое время определял размер файла так: вызывал fread, передавал ему огргмный буфер и смотрел на возвращаемое значение.


V>Эх, молодость, молодость... (с) Поручик Ржевский.


Логично.
Обращение к системному вызову семейства fstat приведет к несдаче лабы.
Сужу по написанным мною нескольким лабам для студентов (мелкой сестре и пр) МИФИ.
Преподам не нужны хорошие решения. Им нужны те решения, которые они подразумевали при составлении задачи.
И это в общем-то верно (был тут пол года назад, если не больше, спор про методы сортировки. Нет препода, который за qsort поставит зачет — будте добры, реализуйте сами).
--
Спасибо
Re[2]: Загрузка в память "большого" файла
От: asdfghjkl  
Дата: 31.08.06 05:45
Оценка: -1
V>
V>unsigned int dump[33554432]; //Что это? Твой ИНН? 32М = 32 * 1024*1024 или 1<<25
V>

Нашел за что критиковать! В "свободном ПО" встречаются такие перлы:
  enum { CHROME_CENTER_SCREEN = 134217728U };

  enum { CHROME_DEPENDENT = 268435456U };

  enum { CHROME_MODAL = 536870912U };

  enum { CHROME_OPENAS_DIALOG = 1073741824U };

  enum { CHROME_OPENAS_CHROME = 2147483648U };

Как думаешь, это битовые флаги (которые можно объединять с поиощью "|"), или просто числовые константы?
Невозможно чтобы у всех было всё, так как всех много, а всего мало...
Re[3]: Загрузка в память "большого" файла
От: kan_izh Великобритания  
Дата: 31.08.06 08:22
Оценка:
asdfghjkl wrote:

> V>unsigned int dump[33554432]; *//Что это? Твой ИНН? 32М = 32 * 1024*1024 или 1<<25*

> V>

> Нашел за что критиковать! В "свободном ПО" встречаются такие перлы:

>   enum { CHROME_CENTER_SCREEN = 134217728U };
>   enum { CHROME_DEPENDENT = 268435456U };
>   enum { CHROME_MODAL = 536870912U };
>   enum { CHROME_OPENAS_DIALOG = 1073741824U };
>   enum { CHROME_OPENAS_CHROME = 2147483648U };


> Как думаешь, это битовые флаги (которые можно объединять с поиощью "|"),

> или просто числовые константы?
Читаем самое начало этого файла:

/*
* DO NOT EDIT. THIS FILE IS GENERATED FROM
c:/builds/tinderbox/MozillaTrunk/WINNT_5.0_Clobber/mozilla/embedding/browser/webBrowser/nsIWebBrowserChrome.idl
*/

А вот сам nsIWebBrowserChrome.idl вручную написанный (и по нему же доки генерятся):
     const unsigned long CHROME_WINDOW_RAISED    = 0x02000000;
     const unsigned long CHROME_WINDOW_LOWERED   = 0x04000000;
     const unsigned long CHROME_CENTER_SCREEN    = 0x08000000;
     const unsigned long CHROME_DEPENDENT        = 0x10000000;
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.