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

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

Восстановить пароль Регистрация
 
dima55501
 Аватар для dima55501
29 / 33 / 6
Регистрация: 14.07.2013
Сообщений: 146
15.12.2013, 11:28     Не записывает в файл #1
Доброго времени суток. Написал код, который должен открывать файл, находить в нем определенный символ и заменять его на другой. Все работает кроме перезаписи файла. В чем может быть проблема?
Код
#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++
C++ Не записывает в файл
Не записывает ничего в файл C++
C++ не записывает в файл
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
15.12.2013, 12:34     Не записывает в файл #2
Зачем тут это (char *) &buf?
dima55501
 Аватар для dima55501
29 / 33 / 6
Регистрация: 14.07.2013
Сообщений: 146
15.12.2013, 12:47  [ТС]     Не записывает в файл #3
Ну как, преобразование к типу char *, чтобы файл можно было прочитать в блокноте.

Добавлено через 10 минут
В любом случае, дело не в этом.
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
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
 Аватар для dima55501
29 / 33 / 6
Регистрация: 14.07.2013
Сообщений: 146
15.12.2013, 13:58  [ТС]     Не записывает в файл #5
vua72, спасибо, теперь буду разбираться в чем у меня ошибка
Yandex
Объявления
15.12.2013, 13:58     Не записывает в файл
Ответ Создать тему
Опции темы

Текущее время: 17:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru