Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2013, 01:20   #1
vvzvlad
Новичок
Джуниор
 
Регистрация: 03.11.2013
Сообщений: 3
Вопрос Вопрос Сохранение массива в файл и чтение массива из файла

Имеется массив:
int region_coordinates[10][4];

Надо его записать в файл(неважно, в каком формате, можно бинарном), а потом прочитать из этого файла и записать обратно в массив. Размер массива меняться не будет, файл правиться не будет. Исправлять файл тоже не надо - каждый раз при записи можно перезаписывать файл с нуля.
За глупый вопрос не бейте, увидел си 5 дней назад.

Если кому интересно, для чего это, вот весь исходник. Это программа под OpenCV, мышкой указываем регионы наблюдения(каждый регион описывается прямоугольником - 4 числа - х,y верхнего левого и х,y нижнего правого углов), и сохраняем в файл. После этого программа запускается, читает из файла настройки и загружает в память координаты и начинает за ними следить.
vvzvlad вне форума Ответить с цитированием
Старый 03.11.2013, 21:17   #2
vvzvlad
Новичок
Джуниор
 
Регистрация: 03.11.2013
Сообщений: 3
По умолчанию

Набыдлокодил вот так:

Код:
        if (c == 114) { //key "r"
        int i_regions=1;
        char filename[11];
        int temp_coordinates[4];
        for (i_regions = 0; i_regions <= 9; i_regions++)
        {
        snprintf(filename,254,"region_%d.bin",i_regions); 
        int settings_file = open(filename, O_RDONLY);
        read(settings_file,temp_coordinates,4*4);
        close(settings_file);
        region_coordinates[i_regions][0]=temp_coordinates[0];
        region_coordinates[i_regions][1]=temp_coordinates[1];
        region_coordinates[i_regions][2]=temp_coordinates[2];
        region_coordinates[i_regions][3]=temp_coordinates[3];
        //printf("%d %d %d %d\n", temp_coordinates[0], temp_coordinates[1], temp_coordinates[2], temp_coordinates[3]);
        //printf("%d %d %d %d\n", region_coordinates[i_regions][0], region_coordinates[i_regions][1], region_coordinates[i_regions][2], region_coordinates[i_regions][3]);
        }
        }
        

      if (c == 119) { // key "w"
        int temp_coordinates[4];
        int i_regions=1;
        char filename[11];
        for (i_regions = 0; i_regions <= 9; i_regions++)
        {
        snprintf(filename,254,"region_%d.bin",i_regions); 
        int settings_file = open(filename, O_WRONLY | O_CREAT);
        temp_coordinates[0]=region_coordinates[i_regions][0];
        temp_coordinates[1]=region_coordinates[i_regions][1];
        temp_coordinates[2]=region_coordinates[i_regions][2];
        temp_coordinates[3]=region_coordinates[i_regions][3];
        write(settings_file,temp_coordinates,4*4);
        close(settings_file);
        }
        }
      }
    }

Последний раз редактировалось vvzvlad; 03.11.2013 в 23:45.
vvzvlad вне форума Ответить с цитированием
Старый 05.11.2013, 23:27   #3
vvzvlad
Новичок
Джуниор
 
Регистрация: 03.11.2013
Сообщений: 3
По умолчанию

последняя версия:
Код:
FILE *settings_file;

FILE* fd = fopen("regions.bin", "rb");  //открываем файл.  "rb" - чтение бинарных данных
if (fd == NULL) 
{
  printf("Error opening file for reading\n");  //если файл не нашли
  FILE* fd = fopen("regions.bin", "wb"); //пытаемся создать
  if (fd == NULL) 
  {
    printf("Error opening file for writing\n");
  }
  else
  {
    fwrite(region_coordinates, 1, sizeof(region_coordinates), fd); //если получилось - записываем туда нулевые координаты
    fclose(fd); //закрываем файл
    printf("File created, please restart program\n");
  }
  return 0;
}

size_t result = fread(region_coordinates, 1, sizeof(region_coordinates), fd); //читаем файл
if (result != sizeof(region_coordinates)) //если прочитали количество байт не равное размеру массива
printf("Error size file\n"); //вываливаем ошибку
fclose(fd); //закрываем файл


FILE* fd = fopen("regions.bin", "wb"); //открываем файл.  "wb" - запись бинарных данных
if (fd == NULL)  //если на нашли файл
printf("Error opening file for writing\n"); //ругаемся
fwrite(region_coordinates, 1, sizeof(region_coordinates), fd); //читаем файл в массив
fclose(fd); //закрываем файл
vvzvlad вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись и чтение символьного массива в файл/из файла (C++) Noyabr Помощь студентам 6 22.01.2012 13:59
Сохранение многомерного массива в файл Agrahil Общие вопросы Delphi 7 10.12.2011 13:55
сохранение массива float в файл alvahtin Общие вопросы C/C++ 1 11.10.2011 12:55
Сохранение массива в файл Дмитрий Стариков Общие вопросы Delphi 7 26.09.2010 19:51
Сохранение массива в файл Artem Общие вопросы Delphi 10 11.12.2007 20:00