Форум программистов, компьютерный форум, киберфорум
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
Игнат116
1 / 1 / 1
Регистрация: 16.09.2011
Сообщений: 17
#1

Чтение бинарного файла на втором проходе цикла завершается с ошибкой - C (СИ)

11.06.2015, 18:05. Просмотров 576. Ответов 6
Метки нет (Все метки)

Добрый день,подскажите как решить проблемку. Читаю бинарный файл в который через некоторое время добавляются новые данные весом 20 КБ.И вот тут возникают проблемы,т.к есть ограничение в размере массива 32 КБ. Для этого сделал смещение в файле т.е читаю первый блок данных,затем второй и т.д. Первый раз все проходит, а во второй раз вылазит ошибка "within the action, an attempt was made during execution to access an undefined memory area".
Думал ,что это из-за того что не обнуляется массив Buffer,но обнуление оного погоду не изменило. Посоветуйте решение.

Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
char Buffer [21000];
int removal,lsize,num,d;
 
 
 
FILE *stream;
stream = fopen("С:\\file.bin", "rb");
fseek(stream,0,SEEK_END);
lsize = ftell(stream);
rewind(stream);
 
removal = 20015; // смещение для каждого блока
Size_data = 20015;//размер одного блока данных
num = lsize / Size_data;//количество блоков данных в файле
 
for (i=0;i<num;i++)
   {
      fseek(stream,removal*i,SEEK_SET);
      memset(Buffer,0,sizeof(Buffer))
      d = fread(Buffer,sizeof(char),Size_data,stream);
      fclose(stream);
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2015, 18:05
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Чтение бинарного файла на втором проходе цикла завершается с ошибкой (C (СИ)):

Чтение строк файла - остается лишний символ при очередном проходе - C (СИ)
Здраствуйте. Есть функция которая циклично считывает строки и числа со стандартного потока. примерно так: #define SSC_OWNER 64 ...

Чтение бинарного файла - C (СИ)
Как считать файл с помошью fread - в файле первые 4 байта вот такие 00 00 00 08 делаю так int byteCount; fread(&amp;byteCount,...

Запись/чтение бинарного файла - C (СИ)
У меня есть процедура которая на вход принимает строку , имя файла , и записывает новый элемент в формате &lt;имя&gt; &lt;инициалы&gt; &lt;пол &gt; &lt;группа&gt;...

Запись и чтение бинарного файла - C (СИ)
Доброго времени суток! Уже какой час бьюсь над проблемой и не могу никак решить ее :( Проблема возникает при попытке чтения...

Чтение строки из бинарного файла - C (СИ)
вопрос в шапке: как считать строку из бинарного файла? размер строки не известен... про азы типа fopen рассказывать не надо... з.ы....

Модифицированный бинарный поиск: программа завершается с ошибкой - C (СИ)
Доброго времени суток. Чутка модифицировал функцию бинарного поиска и теперь программа завершается с ошибкой, причем в режиме отладчика...

6
drfaust
304 / 195 / 52
Регистрация: 02.10.2008
Сообщений: 776
Записей в блоге: 1
Завершенные тесты: 1
11.06.2015, 18:52 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Игнат116 Посмотреть сообщение
C
1
2
3
4
5
6
7
for (i=0;i<num;i++)
* *{
* * * fseek(stream,removal*i,SEEK_SET);
* * * memset(Buffer,0,sizeof(Buffer))
* * * d = fread(Buffer,sizeof(char),Size_data,stream);
* * * fclose(stream); /*ЗАЧЕМ ЗАКРЫВАТЬ ФАЙЛ ВНУТРИ ЦИКЛА ????*/
* * }
Ответ в коментарии
1
Игнат116
1 / 1 / 1
Регистрация: 16.09.2011
Сообщений: 17
11.06.2015, 23:23  [ТС] #3
Файл закрываю для того чтобы не мешать записи "свежих" данных в файл. Данные могут приходят каждую секунду,а вот обработка одного блока данных занимает у меня 5 секунд.
0
drfaust
304 / 195 / 52
Регистрация: 02.10.2008
Сообщений: 776
Записей в блоге: 1
Завершенные тесты: 1
12.06.2015, 01:38 #4
Ага, а как fread будет читать из закрытого файла, то же касается и fseek?
0
Игнат116
1 / 1 / 1
Регистрация: 16.09.2011
Сообщений: 17
12.06.2015, 13:33  [ТС] #5
Ну для меня это было главное,не мешать записи файлу,поэтому как то даже и не думал по другому делать. Сделал do while цикл,все работает. Еще раз спасибо.
0
drfaust
304 / 195 / 52
Регистрация: 02.10.2008
Сообщений: 776
Записей в блоге: 1
Завершенные тесты: 1
12.06.2015, 19:22 #6
Приведи код, ибо если while на do_while сменить - ошибка не исчезнет(приобретёт другой вид) - ВСЕ ОПЕРАЦИИ С ФАЙЛАМИ ТОЛЬКО ЕСЛИ ФАЙЛ ОТКРЫТ
0
Игнат116
1 / 1 / 1
Регистрация: 16.09.2011
Сообщений: 17
18.06.2015, 11:44  [ТС] #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вот так получилось.

Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
char Buffer [21000];
int removal,lsize,num,d;
int num_read; //кол-во уже прочитанных
 
 
 
FILE *stream;
do
{
 stream = fopen("С:\\file.bin", "rb");
 fseek(stream,0,SEEK_END);
 lsize = ftell(stream);
 rewind(stream);
 
 removal = 20015; // смещение для каждого блока
 Size_data = 20015;//размер одного блока данных
 num = lsize / Size_data;//количество блоков данных в файле
 
   if (num_read<num)
   {
      
      fseek(stream,removal*num_read,SEEK_SET);
      d = fread(Buffer,sizeof(char),Size_data,stream);
      fclose(stream);
      num_read++;
   }
      else 
      {fclose(stream);}
 }while (num_read < num);
0
18.06.2015, 11:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2015, 11:44
Привет! Вот еще темы с ответами:

Импорт данных из Excel-файла завершается с ошибкой - C#
Пишу вот: public void GetDataTableExcel(string fileName) { Excel.Application excelApp = new...

Чтение бинарного файла - чтение первых 9 байт - C++ Qt
Есть код, который читает первые 9 байт бинарного файла(заголовок записи) void ATS44Encoder::FileEncode() { QFile* file = new...

Внешняя сортировка бинарного файла (чтение после конца файла невозможно) - Pascal
Помогите отладить программу, не вижу, что здесь можно сделать. Похоже, курсор файла где-то в коде сортировки доходит до конца, но потом все...

Чтение нескольких структур и одной переменной из бинарного файла. Формат файла имеется - C++
Формат файла состоит из 3 структур и одной переменной. Подробное описание формата во вложении, просьба посмотреть его. У меня возникла...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru