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

Потоковая запись/чтение и дозапись в файл - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти сумму попарных произведений элементов массива http://www.cyberforum.ru/cpp-beginners/thread1737262.html
Дан линейный вещественный массив а. Найти : aa+ aa+...+ aa. Спасибо
C++ Ошибки линковки в последней версии thrift при сборке примера Если следовать инструкции (http://mohamednadjibmami.com/apache-thrift-for-c-on-visual-studio-2015/) - то пример калькулятора из архива thrift версии 0.9.2 на С++ собирается и работает (сервер запускается, клиент подключается и выдает результат) Visual Studio 2013 + Apache Thrift 0.9.2 + Boost 1.59.0 + Libevent 2.0.22 + OpenSSL 1.0.2h Но вот если использовать Apache Thrift 0.9.3, то при сборке... http://www.cyberforum.ru/cpp-beginners/thread1737247.html
Перевод кода с VB на C++ C++
Помогите перевести код с VB на C++ Private Sub Command1_Click() Dim a As Double, c As Integer, p As Integer, z As Double, y As Double c = -38 p = 18 a = InputBox("Enter a", a) y = Sin(a) + Sqr(p) If y < 0 Then z = (y / 5.5) + Sqr((a + c) ^ 3) End If
C++ Как в матрице менять столбцы местами?
Добрый день. Есть такая задача. Дана матрица действительных чисел размера m x n. Переформировать матрицу таким образом, чтобы ее столбцы располагались в порядке возрастания сумм положительных элементов столбцов. Не могу понять общего принципа алгоритма. Буду признателен за любую помощь.
C++ Перенос элементов из двух массивов http://www.cyberforum.ru/cpp-beginners/thread1737226.html
есть код программы который написал сам, но до конца не выходит, кто может помогите мне. само задание вот: Программа должна создать два статических массива со случайными элементами из диапазона , по 10 элементов в каждом массиве, отсортировать эти массивы по возрастанию и вывести каждый массив на экран на отдельной строке. Затем программа должна создать динамический массив нужного размера и...
C++ Найти сумму матриц Даны две вещественные квадратные матрицы А и В порядка n. Считая , что 1<=i<=n , 1<=j<=n, найти : сумму матриц С= А + В , где с= a+ b подробнее

Показать сообщение отдельно
PantyDev
0 / 0 / 0
Регистрация: 17.05.2016
Сообщений: 1
17.05.2016, 13:35     Потоковая запись/чтение и дозапись в файл
Доброго времени суток уважаемые гуру С++. Хочу поделится моей проблемой. Дело в том, что задание такое: необходимо сделать(в консольном приложении) чтобы программа могла создавать файл(предварительно пользователь должен добавить в него три элемента), производить дозапись в файл(по крайней мере ещё 3х элементов), и соответственно производить чтение с этого файла(с дозаписанными элементами, естественно).
Запись в файл происходит вполне нормально, чтение этих 3х первых элементов тоже производится нормально, но вот после дозаписи возникают проблема. В файл новые данные дозаписываются, но вот новые элемента 3 считываться не хотят, только старые нормально считываются.
Выкладываю код программы по кускам(т.к. сильно большая):
Класс, содержащий все поля элемента
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Database
{
        public:
                char mainName[20], systemU[20], motherB[20], CPU[20], PSU[20], ODD[20], HDD[20], videoC[20], soundC[20], networkC[20]; 
                float RAM, HDDsize, priceElem; 
                FILE *f;
                char* RUS(const char*text);
                bool LoadFromFile(const char *FName, const unsigned size);
                bool SaveInFile(const char *FName, const unsigned size);
                bool AddInFile(const char *FName, const unsigned size);
        private:
                char bufRus[256];
};
Методы класса Database чтения/записи, дозаписи в файл:
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
44
45
46
47
48
49
50
51
bool Database::LoadFromFile(const char *FName, const unsigned size)
{
        fstream in;
        in.open(FName, ios_base::binary| ios_base::in);
        if (!in) //В том случае, если файл не удалось найти, обозначаем это
        {
                printf(RUS("Файл по пути ")); printf(FName); printf(RUS(" не существует! Пожалуйста прежде всего создайте файл."));
                return false;
        }
        else
        {
                in.read(reinterpret_cast<char *>(this), sizeof(Database) * size);
                in.close();
                return true;
        }
}
 
bool Database::SaveInFile(const char *FName, const unsigned size)
{
        fstream out;
        out.open(FName, ios_base::binary | ios_base::out);
        if (!out) //В том случае, если файл создать не удалось, обозначаем это.
        {
                printf(RUS("Файл ")); printf(FName); printf(RUS(" по какой-то причине не удалось создать! "));
                return false;
        }
        else
        {
                out.write(reinterpret_cast<char *>(this), sizeof(Database) * size);
                out.close();
                return true;
        }
}
 
bool Database::AddInFile(const char *FName, const unsigned size)
{
        fstream add;
        add.open(FName, ios_base::app | ios_base::binary | ios_base::out);
        if (!add) //В том случае, если в файл добавить элементов не удалось, обозначаем это.
        {
                printf(RUS("В файл ")); printf(FName); printf(RUS(" не удалось добавить элементы!"));
                return false;
        }
                else
        {
                add.write(reinterpret_cast<char *>(this), sizeof(Database) * size);
                add<<"\n";
                add.close();
                return true;
        }
}
А вот собственно функция main, кусок кода по которому производится запись/чтение с полей класса
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
const int N=3;
        const char *F="E:\\info.txt";
        Database *DB=new Database[N];
        Database *DBa=new Database[N];
        Database *DBr=new Database[N];
        choise:
        int answer=menu();
        switch (answer)
        {
                case 0:
                        header(); printf(RUS("Вы хотите создать файл. Пожалуйста создайте 3 ")); colorT(6, 14); printf(RUS("элемента")); colorT(0, 14);
                        printf(RUS(".\nВведите основные характеристики системного блока:\n\n"));
                        for(int i=0; i<N; i++)
                        {
                                printf(RUS("Системный блок ")); colorT(6, 14); printf("%d", i); colorT(0, 14); printf(RUS("\nНазвание элемента: ")); gets(DB[i].mainName);
                                printf(RUS("Наименование системного блока: ")); gets(DB[i].systemU);
                                printf(RUS("Название материнской платы: ")); gets(DB[i].motherB);
                                printf(RUS("Название цетрального процессора(CPU): ")); gets(DB[i].CPU);
                                printf(RUS("Объем оперативной памяти(гб): ")); DB[i].RAM = (float) readNumber();
                                printf(RUS("Название жесткого диска(HDD): ")); gets(DB[i].HDD);
                                printf(RUS("Емкость жесткого диска(гб): ")); DB[i].HDDsize = (float) readNumber();
                                printf(RUS("Название видеокарты: ")); gets(DB[i].videoC);
                                printf(RUS("Название звуковой карты: ")); gets(DB[i].soundC);
                                printf(RUS("Название сетевой карты: ")); gets(DB[i].networkC);
                                printf(RUS("Название блока питания(PSU): ")); gets(DB[i].PSU);
                                printf(RUS("Название оптического привода(ODD): ")); gets(DB[i].ODD);
                                printf("\n");
                        }
                        DB->SaveInFile(F,N);
                        colorT(6, 14); printf(RUS("Элементы")); colorT(0, 14); printf(RUS(" были успешно добавлены. "));
                        printf(RUS("Файл ")); colorT(6, 14); printf(F); colorT(0, 14); printf(RUS(" был успешно создан!"));
                        delete []DB; bMenu(); goto choise;
                case 1:
                        header(); printf(RUS("Вы хотите добавить элементы.\nСколько ")); printf(RUS("новых")); printf(RUS("элементов вы хотите добавить? "));
                        int K; K = (int) readNumber();
                        for(int i=0; i<K; i++)
                        {
                                printf(RUS("Системный блок ")); colorT(6, 14); printf("%d", i); colorT(0, 14); printf(RUS("\nНазвание элемента: ")); gets(DBa[i].mainName);
                                printf(RUS("Наименование системного блока: ")); gets(DBa[i].systemU);
                                printf(RUS("Название материнской платы: ")); gets(DBa[i].motherB);
                                printf(RUS("Название цетрального процессора(CPU): ")); gets(DBa[i].CPU);
                                printf(RUS("Объем оперативной памяти(гб): ")); DBa[i].RAM = (float) readNumber();
                                printf(RUS("Название жесткого диска(HDD): ")); gets(DBa[i].HDD);
                                printf(RUS("Емкость жесткого диска(гб): ")); DBa[i].HDDsize = (float) readNumber();
                                printf(RUS("Название видеокарты: ")); gets(DBa[i].videoC);
                                printf(RUS("Название звуковой карты: ")); gets(DBa[i].soundC);
                                printf(RUS("Название сетевой карты: ")); gets(DBa[i].networkC);
                                printf(RUS("Название блока питания(PSU): ")); gets(DBa[i].PSU);
                                printf(RUS("Название оптического привода(ODD): ")); gets(DBa[i].ODD);
                                printf("\n");
                        }                                                      -
                        DBa->AddInFile(F,N);
                        colorT(6, 14); printf(RUS("Элементы")); colorT(0, 14); printf(RUS(" были успешно добавлены в файл"));
                        colorT(6, 14); printf(F); colorT(0, 14);
                        delete []DBa; bMenu(); goto choise;
                case 2:
                        header();
                        if (DBr->LoadFromFile(F,N)==true)
                        { //Чтение данных в массив классов из созданного файла.
                                printf(RUS("Вы хотите просмотреть содержимое файла info.\nСодержимое файла по пути ")); colorT(6, 14); printf(F); colorT(0, 14); printf(RUS(": \n"));
                                for (int i=0; i<5; i++)
                                {
                                        printf(RUS("Системный блок ")); colorT(6, 14); printf("%d", i); colorT(0, 14); printf(RUS("\nНазвание элемента: ")); printf(DBr[i].mainName); printf("\n");
                                        printf(RUS("Наименование системного блока: ")); printf(DBr[i].systemU); printf("\n");
                                        printf(RUS("Название материнской платы: ")); printf(DBr[i].motherB); printf("\n");
                                        printf(RUS("Название цетрального процессора(CPU): ")); printf(DBr[i].CPU); printf("\n");
                                        printf(RUS("Объем оперативной памяти(гб): ")); cout<<DBr[i].RAM; printf("\n");
                                        printf(RUS("Название жесткого диска(HDD): ")); printf(DBr[i].HDD); printf("\n");
                                        printf(RUS("Емкость жесткого диска(гб): ")); cout<<DBr[i].HDDsize; printf("\n");
                                        printf(RUS("Название видеокарты: ")); printf(DBr[i].videoC); printf("\n");
                                        printf(RUS("Название звуковой карты: ")); printf(DBr[i].soundC); printf("\n");
                                        printf(RUS("Название сетевой карты: ")); printf(DBr[i].networkC); printf("\n");
                                        printf(RUS("Название блока питания(PSU): ")); printf(DBr[i].PSU); printf("\n");
                                        printf(RUS("Название оптического привода(ODD): ")); printf(DBr[i].ODD); printf("\n\n");
                                }
                                printf(RUS("Файл ")); colorT(6, 14); printf(F); colorT(0, 14); printf(RUS(" был успешно прочитан!"));
                                delete []DBr; bMenu(); goto choise;
                        }
                        else
                        {
                                printf(RUS("Чтобы вернуться в меню, нажмите любую кнопку."));
                        }
                        getch(); goto choise;
                case 3: 
                (............)
Еще раз повторюсь, проблема в том, что когда программа начинает читать файл нормально отображаются только те элементы которые были введены при создании файла. Возможно проблема в самом очевидном месте, но я этого не заметил... Помогите пожалуйста решить эту проблему. Заранее спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru