Сохранение массива в файл и его чтение

Есть массив: int region_coordinates[10][4];
Как его проще всего записать данные из него в файл, а потом их оттуда прочитать и записать обратно в массив?

Сейчас такой костыль, чтение:
    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];
    }


Сохранение:

          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);
          }
  • Вопрос задан
  • 8542 просмотра
Решения вопроса 1
xanep
@xanep
FILE* fd = fopen("filename", "rb");  //ключ должен быть "rb" - чтение бинарных данных
if (fd == NULL) 
    printf("Error opening file for reading");
size_t result = fread(region_coordinates, 1, sizeof(region_coordinates), fd);
if (result != sizeof(region_coordinates)) 
    printf("Error reading file"); //прочитали количество байт не равное размеру массива
fclose(fd);

FILE* fd = fopen("filename.bin", "wb");
if (fd == NULL) 
    printf("Error opening file for writing");
fwrite(region_coordinates, 1, sizeof(region_coordinates), fd);
fclose(fd);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@rozhik
Если файл бинарный — то просто записываете
fd = fopen( filename, "wb" ); write( fd, i_regions, sizeof( i_regions ) ); fclose( fd );
, читаем — вместо врайт — рид.
Если должен быть текстовый, редактируемый руками — тогда json, inifile или как удобнее редактировать (как по мне JSON best ).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы