Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Ferrari F1
623 / 521 / 101
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
#1

Запись текста в бинарный файл - C++

21.03.2015, 12:14. Просмотров 934. Ответов 13
Метки нет (Все метки)

Есть программа, она должна записывать в бин файл, обычную строку.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <iomanip>
#include <fstream>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    fstream file("TEST.TXT", ios::binary | ios::in | ios::out);
    char str[80];
    cin.getline(str, 80); // вводим строку
    file.write((char*)str, 80); // пытаемся занести ее в файл
    for (short i(0); i < 80; str[i++] = 0); // опустошаем массив
    file.read((char*)str, 80); // заполняем массив инфой, считаной из файла
    cout << str << endl; // fail =(
    system("pause");
    return 0;
}
Но выводятся крокозябры, объясните.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2015, 12:14
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Запись текста в бинарный файл (C++):

Запись в бинарный файл - C++
Помогите приделает функцию что бы она записывала не в обычный файл а в бинарный, уже три чеса сижу выходит ерунда. Надо еще что бы при...

Запись в бинарный файл - C++
Всем привет. Столкнулся с следующей проблемой при написании курсача,а именно с записью в бинарный в файл: дело в том, что я каждый раз...

Запись в бинарный файл - C++
Здравствуйте. Прошу помочь разобраться с проблемой. Необходимо записать в двоичный файл 8-байтовое число, но не как строку, а...

Запись в бинарный файл - C++
По заданию требуется организовать ввод данных типа структуры в бинарных файл , в соответствии с позицией, задаваемой пользователем. При...

Запись в бинарный файл - C++
Всем привет. Подскажите пожалста как через fstream добавить запись в бинарный файл ? нужно добавить именно В НАЧАЛО , не очищая...

Запись в бинарный файл - C++
Подскажите как записать данные из StringGrid в бинарный файл и компоновка допустим из 2 StringGrid построчно

13
Kerry_Jr
Эксперт PHP
2210 / 2006 / 702
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
21.03.2015, 12:30 #2
Ferrari F1, у TEST.TXT кодировка какая? А еще попробуйте перед записью в файл вывести строку в консоль.
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
21.03.2015, 12:37 #3
"Перемотай" после записи:
C++
1
    file.seekg( 0 );
0
Ferrari F1
623 / 521 / 101
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
21.03.2015, 12:49  [ТС] #4
castaway, а еще вопрос
можно ли создать текстовый файл (не бинарный) через определение
C++
1
fstream file("TEST.TXT", ios::in | ios::out);
Добавлено через 7 минут
Например, почему нельзя написать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <iomanip>
#include <fstream>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    fstream file("TEST.TXT", ios::out | ios::in);
    char str[80];
    cin.getline(str, 80);
    file << str;
    for (short i(0); i < 80; str[i++] = 0);
    file >> str;
    cout << str << endl;
    system("pause");
    return 0;
}
0
zss
Модератор
Эксперт С++
6928 / 6490 / 2182
Регистрация: 18.12.2011
Сообщений: 17,105
Завершенные тесты: 1
21.03.2015, 13:03 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
fstream file;
    file.open("TEST.TXT", ios::out | ios::in); // файл должен существовать, если его нет, то не откроется
    if(file)
    {
        char str[80];
        cin.getline(str, 80);
        file << str;               // пришем поверх того, что уже есть в файле
        file.seekp(0,ios::beg);    // перемещаемся на начало файла
        for (short i(0); i < 80; str[i++] = 0);
        file >> str;
        file.close();
        cout << str << endl;
    }
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
21.03.2015, 13:05 #6
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Например, почему нельзя написать так:
Кто сказал что нельзя? Можно, если файл существует и он текстовый. +
Цитата Сообщение от castaway Посмотреть сообщение
"Перемотай"
C++
1
file.seekg( 0 );
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
можно ли создать текстовый файл (не бинарный) через определение
Можно, только без флага ios::in:
C++
1
fstream file("TEST.TXT", ios::out);
0
nmcf
6207 / 5518 / 1932
Регистрация: 14.04.2014
Сообщений: 23,155
21.03.2015, 13:07 #7
Почему без флага ios::in?
0
Ferrari F1
623 / 521 / 101
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
21.03.2015, 13:14  [ТС] #8
zss,
а
C++
1
2
fstream file;
file.open("TEST.TXT", ios::out | ios::in);
и
C++
1
fstream file("TEST.TXT", ios::out | ios::in);
Это ведь по сути одно и то же?

Добавлено через 5 минут
zss,
C++
1
file.seekp(0);
а seekg() можно использовать к такому файлу?
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
21.03.2015, 13:16 #9
Цитата Сообщение от nmcf Посмотреть сообщение
Почему без флага ios::in?
Так работает fstream. Файл создаётся только с флагом ios::out или ios::trunc. (ссыль)
1
Ferrari F1
623 / 521 / 101
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
21.03.2015, 13:51  [ТС] #10
castaway, zss,
Запись текста в бинарный файл
0
zss
Модератор
Эксперт С++
6928 / 6490 / 2182
Регистрация: 18.12.2011
Сообщений: 17,105
Завершенные тесты: 1
21.03.2015, 14:04 #11
file.open() позволяет использовать переменную file многократно:
Закрыть один файл и открыть другой, или тот же, но для другого типа доступа.

Я так и не понял, чем seekp отличается от seekg.
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
21.03.2015, 14:11 #12
Ferrari F1, en.cppreference.com
1
nmcf
6207 / 5518 / 1932
Регистрация: 14.04.2014
Сообщений: 23,155
21.03.2015, 17:24 #13
Цитата Сообщение от zss Посмотреть сообщение
Я так и не понял, чем seekp отличается от seekg
У потока два указателя - для чтения и для записи, соответственно две функции.
0
Ferrari F1
623 / 521 / 101
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
21.03.2015, 18:12  [ТС] #14
zss, а еще есть функции tellg() и tellp(), возвращающие численное значение (в байтах) относительно начала файла соотв. указателя.
0
21.03.2015, 18:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2015, 18:12
Привет! Вот еще темы с ответами:

Запись в бинарный файл - C++
Подскажите пожалуйста,где в коде ошибка??никак найти не могу почему х не считает. В файл записываются 0. Задние на картинке. #include...

Запись в бинарный файл - C++
Скажите пожалуйста, правильно ли работает моя программа? (Имеется ввиду запись в бинарный файл) #include &quot;stdafx.h&quot; #include...

Запись классов в бинарный файл - C++
Привет у меня такая проблема я вроде всё сделал правильно но у меня всё равно чтение не идёт из файла. //emp.h -- заголовочный файл для...

Запись string в бинарный файл - C++
Задача такая. Записать в бинарный файл строку string, а потом убедится, что все было записано верно. Помогите, если не сложно. Долго...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru