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

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

Войти
Регистрация
Восстановить пароль
 
dima55501
29 / 33 / 6
Регистрация: 14.07.2013
Сообщений: 146
#1

Не записывает в файл - C++

15.12.2013, 11:28. Просмотров 300. Ответов 4
Метки нет (Все метки)

Доброго времени суток. Написал код, который должен открывать файл, находить в нем определенный символ и заменять его на другой. Все работает кроме перезаписи файла. В чем может быть проблема?
Код
#include <iostream>
#include <fstream>
#include <Windows.h>

using namespace std;

int main()
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	char buf[1024];
	char name[64];
	char oldSymb, newSymb;
	int ctr = 0;
	cout << "Введите название файла: ";
	cin.get(name, 64);
	cout << "Введите символ, который надо заменить: ";
	cin >> oldSymb;
	cout << "Введите символ, которым нужно заменить: ";
	cin >> newSymb;
	fstream file(name, ios::binary | ios::in | ios::out);
	if (!file)
	{
		cout << "Ошибка во время открытия файла. " << endl;
		system("pause");
		return 1;
	}
	file.read((char *) &buf, sizeof(buf));
	for (int i = 0; i < file.gcount(); i++) //вывожу содержимое начального файла на экран для проверки
	{
		cout << buf[i];
	}
	for (int i = 0; i < file.gcount(); i++) //заменяю символы
	{
		if (buf[i] == oldSymb)
		{
			buf[i] = newSymb;
		}
	}
	cout << endl;
	for (int i = 0; i < file.gcount(); i++) //вывожу содержимое нового файла на экран для проверки
	{
		cout << buf[i];
	}
	file.write((char *) &buf, sizeof(buf));
	file.close();
	system("pause");
	return 0;
}
Перед file.write пробовал ставить указатель на начало файла с помощью seekp, но результата это не дало.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2013, 11:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не записывает в файл (C++):

Не записывает в файл - C++
писал на visual studio, надо переделать на dev. товарищи, помогите. какая-то фигня с fаpp #include &lt;iostream&gt; #include &lt;cstdlib&gt; ...

Не записывает в файл - C++
#include &quot;stdafx.h&quot; #include &lt;list&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;iterator&gt; #include...

не записывает в файл - C++
суть - записать из 3-х файлов в 1 и обратно #define _CRT_SECURE_NO_WARNINGS #include &quot;stdafx.h&quot; #include &quot;conio.h&quot; #include...

Не записывает в файл - C++
посмотрите и исправьте ошибку в коде #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; double f(double uu,double vv)...

Не записывает в файл - C++
Здравствуйте! Сделал сортировку,но почему то не записывается в файл. Сам код: #include&lt;iostream&gt; #include&lt;fstream&gt; using...

Не записывает в файл? - C++
Не записывает результат преобразования в файл, пожалуйста помогите! #include &lt;stdio.h&gt;//Подключение библиотеки стандартного...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
15.12.2013, 12:34 #2
Зачем тут это (char *) &buf?
dima55501
29 / 33 / 6
Регистрация: 14.07.2013
Сообщений: 146
15.12.2013, 12:47  [ТС] #3
Ну как, преобразование к типу char *, чтобы файл можно было прочитать в блокноте.

Добавлено через 10 минут
В любом случае, дело не в этом.
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
15.12.2013, 13:52 #4
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
#include <iostream>
#include <fstream>
#//include <Windows.h>
using namespace std;
 
int main() {
    //SetConsoleCP(1251);
    //SetConsoleOutputCP(1251);
    char *buf;
    //char name[64];
    char oldSymb, newSymb;
    //int ctr = 0;
    //cout << "Введите название файла: ";
    //cin.get(name, 64);
    //cout << "Введите символ, который надо заменить: ";
    //cin >> oldSymb;
    //cout << "Введите символ, которым нужно заменить: ";
    //cin >> newSymb;
    oldSymb = 'E';
    newSymb = 'e';
    const char *name = "1.dat";
    fstream file(name, ios::binary | ios::in | ios::out);
    if (!file) {
        cout << "Ошибка во время открытия файла. " << endl;
        //system("pause");
        return 1;
    }
    // razmer
    file.seekg(0, ios::end);
    long int len = file.tellg();
    file.seekg(0, ios::beg);
    cout << endl << len << endl;
    buf = new char[len];
    //
    file.read(buf, len);
    cout << endl << file.gcount() << endl;
    for (int i = 0; i < file.gcount(); i++) //вывожу содержимое начального файла на экран для проверки
            {
        cout << buf[i];
    }
    for (int i = 0; i < file.gcount(); i++) //заменяю символы
            {
        if (buf[i] == oldSymb) {
            buf[i] = newSymb;
        }
    }
    cout << endl;
    for (int i = 0; i < file.gcount(); i++) //вывожу содержимое нового файла на экран для проверки
            {
        cout << buf[i];
    }
    if (file.eof())
        file.clear();
    file.seekp(0, ios::beg);
    file.write(buf, len) << flush;
    file.close();
    delete[] buf;
    return 0;
}
dima55501
29 / 33 / 6
Регистрация: 14.07.2013
Сообщений: 146
15.12.2013, 13:58  [ТС] #5
vua72, спасибо, теперь буду разбираться в чем у меня ошибка
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2013, 13:58
Привет! Вот еще темы с ответами:

записывает в файл каракули - C++
почему когда я ввожу данные мне в файл записывает каракули, и такое же когда ввивоже из файла на экран? #include &lt;iostream&gt; #include...

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

В файл не записывает массив - C++
Добрый вечер. Есть двумерный строковый массив размером 10x80. При в воде массива создаётся файл, но массив туда не записывается....

Не записывает ничего в файл - C++
Добро всем утро! Надеюсь хоть у кого-то оно доброе=) Помогите пжл с программой(написать либо подправить). Задача следующая: &quot;Создать...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.12.2013, 13:58
Ответ Создать тему
Опции темы

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