Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Файловый ввод-вывод, fstream 
:(
    Опции темы
Vex
  Дата 22.5.2004, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


кацапосрачмученiкъ
****


Профиль
Группа: Экс. модератор
Сообщений: 3103
Регистрация: 28.3.2002
Где: strawberry fields

Репутация: 1
Всего: 88



Как удалить одну запись из файла:
вот например:

Код

...
struct txxx{
int x;
char y[10];
float z;
};

txxx my_xxx;
ofstream inxxx("file_name",ios::out);
...
outxxx.write((char*)&my_xxx,sizeof(my_xxx));
outxxx.close;



ну записали мы туда несколько структур, теперь читаем:

Код

ifstream inxxx("file_name",ios::in);
...
while(inxxx.eof()){
inxxx.read((char*)&my_xxx,sizeof(my_xxx));
...
}
inxxx.close;


Как мне удалить, например, пятую запись? Есть ли там вообще какие-то методы типа insert или delete?

P.S. ну и гадость же этот с++ даже нет типизированых файлов, зато куча классов в которых и черт голову сломит, полная анархия hmmm.gif


--------------------
Слава Україні.
PM   Вверх
Guest
Дата 22.5.2004, 23:43 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я не очень понял, про что вопрос, но постараюсь ответить.
1. создай массив структур, считывай все в массив, а потом пропускай ненужные элементы при записи или добавляй их.
2. можешь вместо файлов использовать СУБД.
3. можешь сам определить функции или методы методы типа insert или delete для своих структур и использовать их.



  Вверх
Vex
Дата 23.5.2004, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


кацапосрачмученiкъ
****


Профиль
Группа: Экс. модератор
Сообщений: 3103
Регистрация: 28.3.2002
Где: strawberry fields

Репутация: 1
Всего: 88



Цитата
1. создай массив структур, считывай все в массив, а потом пропускай ненужные элементы при записи или добавляй их.


Не хочу заморачиваться с динамическими массивами, а С++ наверняка не поддерживает открытых массивов.


Цитата
2. можешь вместо файлов использовать СУБД.

Исключено.


Цитата
3. можешь сам определить функции или методы методы типа insert или delete для своих структур и использовать их.


Наверное так и придется делать.

З.Ы. Блин, сколько классов для одной простой цели (ввод-вывод в файл) а нет самых элементарных вещей mad.gif


--------------------
Слава Україні.
PM   Вверх
Anklav
Дата 23.5.2004, 02:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 9.12.2003
Где: Менск

Репутация: нет
Всего: 1



Цитата
а С++ наверняка не поддерживает открытых массивов.

Ну, написать класс такого динамического массива - это не проблема, на то он и C++.
PM ICQ   Вверх
Baa
Дата 23.5.2004, 02:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



а почему нельзя использовать STL? vector или list


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Гость00
Дата 23.5.2004, 06:47 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Vex @ 22.5.2004, 23:05)
P.S. ну и гадость же этот с++ даже нет типизированых файлов, зато куча классов в которых и черт голову сломит, полная анархия hmmm.gif

Типизированный файл можно объявить, например, просто используя шаблоны basic_(if,of)stream
Например, обычный ofstream объявляется как

typedef basic_ofstream<char, char_traits<char>> ofstream;

Можно вместо char поставить другой тип
  Вверх
Sined
Дата 23.5.2004, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 19.5.2004

Репутация: 1
Всего: 0



Привет! Вот прогрммка, которая удаляет из заданной позиции файла задданое количество байт--один глюк правда, размер при этом не меняется
Код
fstream Data("1.txt",ios::in |ios::out |ios::binary);
fstream Data_2("2.txt",ios::out|ios::binary);
char* some_data;
int get_size()
{
Data.seekg(0,ios::end);
return Data.tellg();
}

int fun_remove_from_pos(int pos,int bytes_to_remove)
{
some_data=NULL;
int i=get_size()-pos-bytes_to_remove;
some_data=(char*)malloc(i);
Data.seekp(pos+bytes_to_remove,ios::beg);
Data.read(some_data,i);
some_data[i-1]=EOF;
Data.seekp(pos,ios::beg);
Data.write(some_data,i);
free(some_data);
}

int main(int argc, char **argv)
{
fun_remove_from_pos(12,4);
Data.close();
       return 0;
}


PM MAIL   Вверх
Vex
Дата 23.5.2004, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


кацапосрачмученiкъ
****


Профиль
Группа: Экс. модератор
Сообщений: 3103
Регистрация: 28.3.2002
Где: strawberry fields

Репутация: 1
Всего: 88



Цитата
а почему нельзя использовать STL? vector или list


Не я выбираю, что мне использовать sad.gif

Sined, о, то что надо, спасибо wink.gif

Дополнительные классы мне писать некогда, да и на сях я очень редко сижу, так что все хочется сделать быстро с помощью стандартных библиотек и не мучаться.


--------------------
Слава Україні.
PM   Вверх
Baa
Дата 23.5.2004, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Код

#include <fstream.h>


int _tmain(int argc, _TCHAR* argv[])
{

fstream Data("c:\\1.txt",ios::in |ios::out |ios::binary);
fstream Data_2("c:\\2.txt",ios::out|ios::binary);

int iCounter = 0;
while (!Data.eof())
{
 char cTemp;
 iCounter++;
 Data.read (&cTemp, 1);
//нам надо удалить пятый элемент
 if (iCounter == 5)
 {
 } else {
  Data_2.write (&cTemp, 1);
 }
}

Data.close ();
Data_2.close();
return 0;
}



--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Vex
Дата 24.5.2004, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


кацапосрачмученiкъ
****


Профиль
Группа: Экс. модератор
Сообщений: 3103
Регистрация: 28.3.2002
Где: strawberry fields

Репутация: 1
Всего: 88



Baa, сенькс ;)

Люди, подскажите аналог паскалевского Rewrite(); // запись файла с нуля




З.Ы. 2Baa что-то нам с инетом не везет, часто падает, и аська стала глючной sad.gif



--------------------
Слава Україні.
PM   Вверх
Sined
Дата 24.5.2004, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 19.5.2004

Репутация: 1
Всего: 0



Не мог бы ты поподробнее сказать...
Если просто отбросить содержимое файла
например так
fstream D2("file_name",ios::bin|ios::trunc);
PM MAIL   Вверх
Vex
Дата 24.5.2004, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


кацапосрачмученiкъ
****


Профиль
Группа: Экс. модератор
Сообщений: 3103
Регистрация: 28.3.2002
Где: strawberry fields

Репутация: 1
Всего: 88



ОК, понятно. мне надо, чтобы при добавлении записи в файл старые данные исчезли.

а не подскажите функцию удаления файла?


З.Ы. извините, что всех уже замучал, просто из С++ под рукой есть только книга "Visual C++ 6.0 Для профессионалов" adv/14.gif

З.Ы модеры извините меня, но вопросы столь мелочные, что даже новую тему открывать не стоит, но если скажете, я все удалю и создам соответствующие топики.


--------------------
Слава Україні.
PM   Вверх
chipset
Дата 25.5.2004, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



Vex
Visual C++ 6.0 для профессионалов Круглински, Шеферд, Уингоу? Да классная книжкаsmile.gif
Ах да функция удаления файла...
DeleteFile("file.txt");
Ещё exception'ами окружи, мало ли rolleyes.gif


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
sergejzr
Дата 25.5.2004, 03:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Ну или на Анзи Си

Код
#include <stdio.h>

//Удаляем
int remove(const char *pathname);

//Переименовываем
int rename(const char *oldpath, const char *newpath);



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Vex
Дата 31.5.2004, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


кацапосрачмученiкъ
****


Профиль
Группа: Экс. модератор
Сообщений: 3103
Регистрация: 28.3.2002
Где: strawberry fields

Репутация: 1
Всего: 88



Baa, нашел глюк в твоем коде, когда даные копируются, то во втором файле дублируется последняя запись, не подскажешь как исправить?

Добавлено @ 14:06
еще не удаляется последняя запись.


--------------------
Слава Україні.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0903 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.