Форум программистов, компьютерный форум CyberForum.ru

Не могу записать переменую и массив в файл - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Подскажите мне пожалуйста!!! http://www.cyberforum.ru/cpp-beginners/thread57377.html
Возможно ли сделать геометрические фигуры разных цветов (например красный квадрат, шар синий, треугольник зеленый и т.д.) на с++ ??
C++ Задание про двунаправлленные списки Помогите решить задачу по программированию новичку в этом деле Каталог книг, содержащихся в библиотеке, представлен в виде двунаправленного списка. Написать программу, обрабаты*вающую такой каталог (включение, исключение книг, поиск нуж*ной книги). http://www.cyberforum.ru/cpp-beginners/thread57375.html
C++ Работа с переводом элемента строки в число
Суть задачи состоит в том,чтобы допустим из строки char _4islo="253617521"; записать все цифры в некоторый массив int cifra; так,чтобы каждая ячейка соответствовала цифре в строке,к примеру cifra=2; cifra=5; и т.д. Пробывал брать какой-нибудь элемент массива,к примеру _4islo и переводить его в цифру функцией atoi,но он мне писал ошибку,может я код неправильно оформил???Вариант типа:перевести...
C++ Вычислить число "е" с определонной точностью
Всем привет! Я меня к Вам такая просьба... напишите прогу или подскажите где можна найти... Задание: Вычислить число "е" с точностью к n десятичных цифр после запятой. Написано нужно ни Си или Си++!!! Паскаль я не знаю!
C++ Переделка кода http://www.cyberforum.ru/cpp-beginners/thread57352.html
Всем доброго времени суток!!! Вот мой код: #include <string.h> #define LEN 256 #include <stdio.h> #include <ctype.h> #include <iostream.h> void delSep(char * str) {
C++ Определение длины подпоследовательности Вот такое задание у меня: составить программу для определения длины самой длинной неубывающей подпоследовательности в последовательности чисел. Причём в качестве подпоследовательности брать лишь подряд расположенные элементы. Последовательность вводится из текстового файла. Вывести длину найденной подпоследовательности и саму подпоследовательность как на экран, так и в текстовый файл. ... подробнее

Показать сообщение отдельно
Hacker_
11 / 11 / 0
Регистрация: 10.09.2009
Сообщений: 261
21.10.2009, 17:50  [ТС]     Не могу записать переменую и массив в файл
Большое спасибо Alexandoros и RazorQ.
Буду очень благодарен если поможете закончить реализацию класса.
Я написал класс вида:
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
class ReadWrite
{
        //строчка ver
        char* ver;
        //v-Версия
        char v;
        //Число графиков
        char N;
        //L-Длина графика
        long L;
        //Коэфициенты умножения
        char k[];
        //t-общее время записи
        long t;
        //Массив байт графиков
        int Y[][128];
        public:
        ReadWrite();
        //Функция записи в файл
        void PutInFile(String FileName,byte N,long L,long t,int k[],int sizeK,int Y[][8],int sizeY);
        //Функция извлечения записаной информации из файла
        void GetFromFile(String FileName);
 
};
В данном классе есть два метода, первый записывает информацию в файл, вот его реализация:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void ReadWrite::PutInFile(String FileName,byte N,long L,long t,int k[],int sizeK,int Y[][8],int sizeY)
{
        //создаем вайл и получаем его хендл
        int iFileHandle = FileCreate(FileName);
        //Записуем ver в начало файла
        FileWrite(iFileHandle,(char*)ver, sizeof(ver));
        //Записываем номер версии
        FileWrite(iFileHandle,&v, sizeof(v));
        //Записываем число массивов
        FileWrite(iFileHandle,&N, sizeof(N));
        //записываем максимальную длину масива
        FileWrite(iFileHandle,&L, sizeof(L));
        //записываем время записи
        FileWrite(iFileHandle,&t, sizeof(t));
        //записываем массив коэфициентов
        FileWrite(iFileHandle,k, sizeK);
        //сохраняем массив с данными
        FileWrite(iFileHandle,Y, sizeY);
        //закрываю файл
        FileClose(iFileHandle);
 
 
}
Второй метод извлекает информацию из файла, проблема именно в этом методе, он не коректно записывает информацию в переменную:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
void ReadWrite::GetFromFile(String FileName)
{
  //хендл файла
  int iFileHandle;
  //длина файла
  int iFileLength;
  //прочитаные байты
  int iBytesRead;
  //буфур в который мы будем читать файл
  int *pszBuffer;
 
      //Открываем файл получаем его хендл
      iFileHandle = FileOpen(FileName, fmOpenRead);
      //повучаем длину файла в байтах
      iFileLength = FileSeek(iFileHandle,0,2);
      //передвигаем курсов в начало файла
      FileSeek(iFileHandle,0,0);
      //бувер для чтения файла делаем равным длине файла + 1байт
      pszBuffer = new int[iFileLength+1];
      //читаем в pszBuffer, повучаем количество прочитаных байт в iBytesRead
      iBytesRead = FileRead(iFileHandle, pszBuffer, iFileLength);
      //записываем в конец буфера 0
      pszBuffer[iFileLength]=0;
      //закрываем читаемый файл
      FileClose(iFileHandle);
 
      //Вот сдесь и начинается неправильная запись информации в переменные. Почему?
 
      //записываем чило массивов
      N=pszBuffer[4];
      //записываем максимальную длину масива
      L=pszBuffer[5];
      //Общее время записи
      t=pszBuffer[6];
      //Получаем массив коэфициентов
      for(int i=0;i<N;i++)
        k[i]=pszBuffer[7+i];
      //Массив графиков
      for(int i=0;i<N;i++)
        for(int j=0;j<1000;j++)
                Y[j][i]=pszBuffer[8+j+i*1000];
 
}
Есть метод обработки нажатия кнопки который генерирует массив массивов и передает его в функцию записи в файл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void __fastcall TForm1::Save1Click(TObject *Sender)
{
        //Создаем 8 массивов по 1000 элэметнов
        //заполняем их цифрама от 0 до 999
        int osc[1000][8];
        for(int i=0;i<8;i++)
        for(int j=0;j<1000;j++)
        osc[j][i]=j;
 
        //создаем массив коэфициентов
        int k[8];
        for(int i=0;i<8;i++)
        k[i]=1;
 
        //выбираем имя файла в окне "сохранить как"
        SaveDialog1->Execute();
        //Записываем данные
        rw->PutInFile(SaveDialog1->FileName,8,1000,1000,k,sizeof(k),osc,sizeof(osc));
}
Есть обработчик нажатия кнопки позволяющий извлечь инфомрацию из файла:
C++
1
2
3
4
5
6
7
void __fastcall TForm1::Open1Click(TObject *Sender)
{
//выбираем имя файла в окне "открыть"
OpenDialog1->Execute();
//извлекаем данные из файла
rw->GetFromFile(OpenDialog1->FileName);
}
Плюс есть конструктор:
C++
1
2
3
4
5
ReadWrite::ReadWrite()
{
        ver="ver";
        v=1;
}
В дальнейшем я буду получать инфомацию с осциллографа в виде нескольких массивов, каждый из которых будет представлять собой некий график.
Функция PutInFile нужна для записи данных графиков и информации о них в файл.
Поэтому для начала тестирую функцию записую массив массивов в файл.
Вродебы все записывается нормально.
А вот функция извлечения GetFromFile рабоатет некоректно.
N=pszBuffer[4];
в N записывается 0, а должно быть 8.
t=pszBuffer[7];
в t запивается 65234, а должно быть 1000;
Хотя в роде в pszBuffer информация считывается правильно, как мне кажется.

Но я не могу получить извлеченную информацию и поместить ее в переменную и массив.
Почуму?
 
Текущее время: 00:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru