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

Работа с fstream - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ switch (Программа должна переводить введенные цифры в слова) http://www.cyberforum.ru/cpp-beginners/thread942249.html
Программа должна переводить введенные цифры в слова. проблема: в каждом switch выполняются только default . #include <iostream> #include <string> #include <stdlib.h> using namespace std; void G(int* mass) {
C++ Получение отражённого луча Доброго времени суток. Проблема скорее с математикой, чем с программированием. Есть ф-ия, которая по отрезку и стрелке возвращает отражённую стрелку: Arrow reflected(Line& ln, Arrow& aw) { if (!belong_to_line(ln,aw.end())) throw logic_error("point is not belongs to the line"); GVector vp(aw.end().x-aw.begin().x,aw.end().y-aw.begin().y); //вектор из координат стрелки GVector... http://www.cyberforum.ru/cpp-beginners/thread942224.html
C++ Динамический массив структур
Здравствуйте. Нужна помощь. Не получается записать данные в массив структур. По логике вроде все правильно. 1. Создаем динамический массив структур 2. Обращаемся к первому эл. - записываем данные и т.д но почему-то компилятор не воспринимает такой способ записи, подскажите где ошибка. #include <iostream> #include <cstring> struct CandyBar//
Работа с пакетами по Ethernet-y C++
Вообщем поставил вот себе какую задачу. Хочу перехватывать (копировать) пакеты и расшифровывать только три вещи.(От кого, кому, объем данных). Буду писать наверно на Qt 5. В реальной жизни хочу пределать вот к чему. Локальная сеть. На одном из компов стоит YOTA(через USB) и раздает интернет. Хотелось бы вести учет трафика.(Программа будет устанавливаться на тот комп который раздает....
C++ DLL не возвращает строку http://www.cyberforum.ru/cpp-beginners/thread942191.html
Добрый день. Хочу создать DLL для использования в 1с. Пока получается только вернуть число, а нужно вернуть строку. Вызывается метод met4. Код: ExampleFS.cpp: // ExampleFS.cpp: реализация CExampleFS #include "stdafx.h" #include "ExampleFS.h"
C++ Изображения, бинарные и текстовые файлы Доброго времени суток. подскажите как можно получить из видео или картинки файл формата txt или dat ?? Вот пример, где пытаюсь вывести на экран инфу о картинке, но это что-то не то. Если изменить картинку, результат не изменится. #include <iostream> // std::cout #include <fstream> // std::ifstream int main () { std::ifstream ifs ("skhema.jpg", std::ifstream::in); подробнее

Показать сообщение отдельно
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
23.08.2013, 13:32     Работа с fstream
Здорова!

Создал класс для записи и чтения файла через операцию [] , но почему то он работает не так как нужно.
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
#include <iostream>
using std::cout;
using std::endl;
#include <fstream>
using std::fstream;
#include <cstdlib>
using std::exit;
#include <streambuf>
using std::streambuf;
 
class pot
{
    fstream* pt;
public:
    struct exept{};
 
    pot(char* name)
    {
        pt=new fstream;
        pt->open(name,fstream::out|fstream::in|fstream::ate|fstream::ate|fstream::binary);
    }
 
    //присваивание означает запись в файл
    //для символа
    pot& operator=(char c){*pt <<c;return *this;}
    //для int 
    pot& operator=(int n)
    {
        *pt <<n;
        return *this;
    }
 
    pot& operator[](int i)
    {
        pt->seekg(0,pt->end);
        if(i>=pt->tellg())
        {
            pt->seekg(0,pt->beg);
            return *this;
        }
        else
        {
            pt->seekg(i);
            return *this;
        }
    }
 
    //оператор преобразования.
    operator char(){return pt->get();}
    operator int(){int n; *pt >>n; return n;}
};
 
int main()
{
    pot f("myfile.txt");
    f[0]='a';
    f[1]='b';
    f[2]='c';
    f[3]='d';
    f[0]='7';
    f[2]=3333;
    char c=f[0]; cout <<c;
    c=f[1];cout <<c;
    c=f[2];cout <<c;
    c=f[3];cout <<c<<endl;
    //вывод operator int()
    cout <<f[0]<<f[1]<<f[2]<<f[3]<<endl;
 
    //символы почемуто заново не записываются отут
    //и числа не добавляются
    f[0]='8';//не записывается
    f[4]=1111111;//не запишется почему?
 
    return 0;
}
От почему то сначала символы нормально добавляются в файл, а после того как я сделаю вывод после операции преобразования, почему то символы перестают добавляться в файл? В примере символ '8' и число 1111111 не добавляется в файл почему? Я проверял указатель на fstream остается один и тот же (выводил адреса). Что же происходит? Что с fstream произошло? Почему невозможно в него записать символ.

Еще от про открытие файла не понятно от если я в open передаю fstream::out|fstream::in|fstream::ate|fstream::ate|fstream::binary у меня почему то если файла нету то он не создается новый, что бы создался новый нужно ate заменить на app либо добавить app, но c app я немогу курсор перемещать по файлу. Что в режиме ate нельзя получается создать файл если его нету, можно только работать с уже готовыми файлами? То есть нужно что то как то так сделать: "Если нельзя открыть файл, то мы открываем с помощью app, то есть создаем пустой файл закрываем поток и заново открываем с ate что бы можно было курсор перемещать. ???

Еще про бинарный режим не сильно понятно как курсор перемещается по файлу используя символы или так сказать блоки памяти int, char, double и т.д. Как бы если записано int 333 то в файле это будет если в бинарном режиме в ячейке допустим [0], ладно я вроде экспериментировал и если файл мы открываем то в бинарном режиме курсор перемещается посимвольно. От если у нас в число записано 333 и мы seekg(1); делаем и считаем в переменную int число то считается 33. В общем можно сделать вывод что бинарный режим применяется только для чтения и записи чисел, можно сказать числовых типов, то есть в бинарном режиме мы можем число 333 записать в три символа и считать также в три символ. Я для типов double не пробовал, но думаю там тоже так будет работать. В общем бинарный режим применяется только для этого? В любом случае в файле данные хранятся в виде символов, только читаются и записываются по разному, правильно ж?????

И еще отета от строчка что она означает? fstream::out|fstream::in|fstream::ate|fstream::ate|fstream::binary
От что сдесь передается в функцию? Число наверно да? Если палочка это логическая операция над числами то должно быть число, но тогда наверно если мы поменяем местами части строки это не одно и тоже будет fstream::out|fstream::in|fstream::ate|fstream::ate|fstream::binary это не fstream::binary|fstream::out|fstream::in|fstream::ate|fstream::ate ???????

Меня от само больше беспокоит это пример с кодом, не понятно почему я уже не могу записывать в файл после нескольких записей и вывода? Я уже экспериментировал по разному в самой функции operator=(int) пытался уже и символ и файл записать через дескриптор но ничего не получается, хотя должно записываться должно, но нет на деле нифига. ??????
Мб кто что знает?????

Добавлено через 22 минуты
От то что мой класс в себе скрывает, все работает нормально, но через мой класс нифига не работает.
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
fstream f;
    f.open("myfile.txt",fstream::in|fstream::out|fstream::ate|fstream::binary);
    f.seekg(0);
    f <<'a';
    f.seekg(1);
    f <<'b';
    f.seekg(2);
    f <<'c';
    f.seekg(3);
    f <<'d';
 
    //вывод
    char c;
    f.seekg(0);
    f >>c; cout <<c;
    f.seekg(1);
    f >>c; cout <<c;
    f.seekg(2);
    f >>c; cout <<c;
    f.seekg(3);
    f >>c; cout <<c<<endl;
 
    //снова пытаемся записать
    f.seekg(0);
    f <<'8';
    f.seekg(4);
    f <<1111111;
Добавлено через 30 минут
Я нашол вчем ошибка cout <<f[0]<<f[1]<<f[2]<<f[3]<<endl; Почему то оператор считывания как то работает неправильно у меня в f[0] находится число все правильно, но в f[1], f[2], f[3] находятся символы потому что я записываю символы в число поэтому поток как то портится. Если мы эту строчку заменим на cout f[0], то все нормально работает и потом записывается после. Ппц какой то. Я вообще хочу что бы все на автомате определялось если символ то вызывался operator char () если число то operator int () ппц просто оно для все вызывается operator int(). ???

Добавлено через 2 минуты
Придется наверно явно присваивать через переменную либо int либо char, потому что на автомате оно вызывает всегда operator int(), закумарила меня уже эта неразбериха.

Добавлено через 22 минуты
Вообще нипонятно что выводится кокието большие числа с минусом хз. что это.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru