Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2014, 15:16   #1
BaTpyXaaa
Пользователь
 
Регистрация: 06.11.2013
Сообщений: 40
Сообщение Удаление из файла

Помогите с Удалением из файла.
Например:
Я записал 2 животных, как удалить 1 из животных из файла?

Вот мой код. Помогите дописать удаление.
Код:
#include<iostream>
#include<fstream>
using namespace std;

struct Animal
{
char name[20];
char code[10];
float kg;
};

int main()
	{cout<<"Enter number of Animals> "<<endl;

	//Заполнение массива
	int n;
	cin>>n;
	Animal * Animals= new Animal[n];
	for(int i=0; i<n; i++)
	{cout<<"Animal number ["<<i+1<<"] "<<endl;
		    cout<<"Name";
	cin>>Animals[i].name;
			cout<<"Code";
	cin>>Animals[i].code;
			cout<<"Kilo";
	cin>>Animals[i].kg;
	}
	// Запись
	ofstream fo("Animals.txt", ios::app|ios::binary);
	if(!fo)
	fo.open("Animals.txt", ios::out|ios::binary);
	
	for(int i=0; i<n; i++)

	fo.write((char*)&Animals[i], sizeof(Animal));
	cout<<"All information has been written\n";
	fo.close();
	
	//Считывание из файла
	ifstream fi("Animals.txt", ios::binary);
	if(!fi) cout<<"Error with file\n";
	else {fi. seekg(0,ios::end);
	int size=fi.tellg();
	size=size/sizeof(Animal);
	Animal * Animals_1= new Animal[size];
	fi.seekg(0, ios::beg);
		fi.read ((char*)Animals_1,sizeof(Animal)*size);

	for(int i=0; i<size; i++)
		cout<<Animals_1[i].name<<" "<<Animals_1[i].code<<" "<<Animals_1[i].kg<<endl;

	}

	system ("Pause");
return 0;
}
BaTpyXaaa вне форума Ответить с цитированием
Старый 10.04.2014, 11:55   #2
BaTpyXaaa
Пользователь
 
Регистрация: 06.11.2013
Сообщений: 40
По умолчанию

Помогите пожалуйста!
BaTpyXaaa вне форума Ответить с цитированием
Старый 10.04.2014, 13:11   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

удаление записей из типизированного (файла, состоящего из записей == структур) выполняется достаточно замороченно.

почитайте мой пост ТУТ (там, правда, речь идёт про Паскаль/Delphi, но сути проблемы это не меняет)

Ещё могу предложить такой вариант (такой подход на практике часто используется, например, в DBF файлах удаление сделано именно по такому принципу) - в структуру добавляете ещё одно поле размером 1 байт (или 1 char), например, deleted. Суть этого поля - признак, удалена запись или нет.
Тогда удаление записи - это записать признак удаления в поле deleted.
При выводе записей из файла - записи, у которых этот признак установлен (т.е. записи являются удалёнными) не отображаем пользователю.
Скорость (и надежность, и простота) удалёния одной записи возрастает многократнейше! Из плюсов - при желании можно отобразить удалённые записи или восстановить удалённую запись.
Из минусов - они занимают место в файле данных (кстати, это решается с помощью процедуры т.н. "упаковки" данных).


p.s. извините, но написать Вам пример на C/C++ не могу, ибо не владею этим ЯВУ.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление из файла F1nt Общие вопросы C/C++ 5 27.01.2014 20:30
Удаление из файла Максикок C++ Builder 2 16.07.2013 18:03
УДаление строки из файла методом создания временного файла. dykatob Общие вопросы C/C++ 3 28.05.2011 01:46
Удаление файла gavrylyuk Microsoft Office Excel 9 26.11.2010 09:03
Удаление файла mopozoff Общие вопросы Delphi 1 13.06.2008 21:25