Как очистить файл с fstream
Перейти к содержимому

Как очистить файл с fstream

  • автор:

Очистить файл

Очистить файл
Как через класы потоков очистить открытый файл? 32 строка вроде ф-ция для очистки, но она не.

Очистить текстовый файл
есть функция сохранения в файл.. int out_file(char* filename,date* cor) < fstream.

Как очистить файл с вводом множества объектов?
Доброго времени суток! Написал код с вводом множества объектов. Ввожу объекты. Потом , понятное.

1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2

file = open( "filename", std::ios::in | std::ios::out ); |

Регистрация: 09.09.2011
Сообщений: 40
файл Я открывал так

std::fstream file("c:\\pass.txt",ios_base::in|ios_base::out);

или смысл ответа в другом?

Добавлено через 4 минуты
видимо проще всего так

while ((c = file.get()) != EOF){}

1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2

ЦитатаСообщение от ganjawar Посмотреть сообщение

или смысл ответа в другом?

В другом.
Файл переоткроется для записи, т.е. очиститься(вам ведь это надо?), и для считывания(но т.к. он пустой, то считывать будет нечего).
P.S. если вы ничего в файл не пишите во время выполнения программы, то он и так пустой будет(из-за ios::out очистится).
P.P.S. неправильно написал немного, open — не функция, а метод.
Т.е. писать нужно так

file.open( "filename", std::ios::in | std::ios::out );

Хотя что-то не то я говорю видимо, секунду.

А, нет, все правильно, нужно просто не забыть закрыть файл.
Что-то вроде такого

1 2 3 4 5
std::fstream in("input.txt", std::ios::in); //в файле что-то есть in.close(); in.open("input.txt", std::ios::out | std::ios::in); //файл пуст

геморно без компилятора все-таки.

Удаления из файла данных (C++)

например я хочу удалить от туда запись Bobik или любую другую .

как можно сделать ? может сущетвует кой алгоритм удаления или надо мудрувать ?

15 ответов

29 октября 2007 года
256 / / 11.11.2005

Алгоритм зависит от того, по каким критериям ты будешь удалять запись: по номеру или по совпадению строк
Так что давай конкретнее

29 октября 2007 года
140 / / 11.09.2007

Алгоритм зависит от того, по каким критериям ты будешь удалять запись: по номеру или по совпадению строк
Так что давай конкретнее

впринцыпе все равно:p и вариант с удалением по сурагатному ключу или по совпаденю строк подходит

29 октября 2007 года
256 / / 11.11.2005
#include
#include
#include

using namespace std;

int main()
ifstream in («test.dat», ios::in);
ofstream out(«test.new», ios::out);
char buff[256];
int num,i;

Алгоритм по совпадению строк отличается парой-тройкой строк
30 октября 2007 года
140 / / 11.09.2007

max_dark спасибо за код.

я наверлно не правильно обяснил, по номеру строки не подходит.
лучше уж по совпадению строки:)))

30 октября 2007 года
1.0K / / 08.01.2007
30 октября 2007 года
140 / / 11.09.2007

m_Valery Спасибо 🙂

с кодом разобрался, только не смог асилить что значит это:

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

почему в вместо main() стоит _tmain и что за фишки: (int argc, _TCHAR* argv[])
30 октября 2007 года
1.0K / / 08.01.2007

Можешь вместо int _tmain(int argc, _TCHAR* argv[]) использовать
int main().int argc и _TCHAR* argv[]) — параметры командной строки. argc — количество параметров,argv — строки,представляющие отдельные значения. Смотри об этом подробнее в учебниках.В Visual Studio 2003,2005 используется int _tmain,в 6-й была просто main.

30 октября 2007 года
140 / / 11.09.2007

кстати а как вам такой вариант:

что на самом деле с файла ничего удалятся не будет
а только будут высавлястся статусы.

Tuzik <отступ>T
Shurik <отступ>T
Bobik <отступ>F
Sharik <отступ>T
Ivanov <отступ>F

там где F то значит что они «мертвые».
а там где T то значит что они «живые».

а в самой проге будет функция которая проверяет статусы и работает только с «живыми» пользователями . и функция по удалению, которая по сути статусы меняет на F

как такая идея, что скажите ?

это я делаю примочки к этому заданию:
http://forum.codenet.ru/showthread.php?t=42495

30 октября 2007 года
256 / / 11.11.2005
С такой структурой можно будет «воскрешать мертвецов» 😉
Если кого прибил по ошибке.
31 октября 2007 года
100 / / 04.09.2007

кстати а как вам такой вариант:

что на самом деле с файла ничего удалятся не будет
а только будут высавлястся статусы.

Tuzik <отступ>T
Shurik <отступ>T
Bobik <отступ>F
Sharik <отступ>T
Ivanov <отступ>F

там где F то значит что они «мертвые».
а там где T то значит что они «живые».

а в самой проге будет функция которая проверяет статусы и работает только с «живыми» пользователями . и функция по удалению, которая по сути статусы меняет на F

как такая идея, что скажите ?

main()
ofstream out(«dogs.dat»,ios::app);

char *name = new char[15];
char status;

в этом примере ты записываешь имя и статус, и читаешь имя и статус в отдельные переменные, и потом в цикле можешь сравнивать статус и вызывать функцию обработку с собаками

01 ноября 2007 года
49 / / 15.10.2006

Можно функции read и write использовать, они записывают в файл структуры в текстовом виде, и соответственно могут удалять структуры

06 декабря 2007 года
2 / / 06.12.2007

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

07 декабря 2007 года
1.0K / / 08.01.2007

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

Построчно считываем файл в вектор.Вводим слово.которое хотим удалить,удаляем его и перезаписываем файл.Например так.

Как очистить файл с fstream

подскажите как очистить текстовый файл.
fstream file
то есть сделать чтоб он был пустым?

подскажите как удалить файл?
всем заранее спасибо!

Есть кнопка «Редактировать»

Последний раз редактировалось merax; 28.11.2007 в 23:21 .
Пользователь
Регистрация: 20.09.2007
Сообщений: 99
Сообщение от BeeX
подскажите как удалить файл?
всем заранее спасибо!

#include
int remove( const char * fname )
Стирает файл, возвращает 0 в случае успеха.

Еще один такой же, кнопку «Редактировать юзайте»

Голова человеку дадена — не токмо шапку носить!
Последний раз редактировалось merax; 28.11.2007 в 23:23 .
Регистрация: 21.11.2007
Сообщений: 8
!
Сообщение от Adamant
#include
int remove( const char * fname )
Стирает файл, возвращает 0 в случае успеха.

а ты не знаешь как файл опустошить?
Пользователь
Регистрация: 20.09.2007
Сообщений: 99


FILE * fopen( «fname», «w» )
Существующий файл с указанным именем будет стерт, а вместо него будет открыт новый файл (с тем же именем). Если файла с указанным вами именем не существует, он будет создан.
P.S. Позволю себе дать вам дружеский совет: если я не ошибаюсь, вы начали изучение сразу с C++. Не пожалейте месяца изучите хотя бы базовый курс простого Си. Убежден, не пожалеете!
С наилучшими пожеланиями.

Голова человеку дадена — не токмо шапку носить!
Регистрация: 21.11.2007
Сообщений: 8
эээ

[QUOTE=Adamant;51607]
FILE * fopen( «fname», «w» )
Существующий файл с указанным именем будет стерт, а вместо него будет открыт новый файл (с тем же именем). Если файла с указанным вами именем не сущес. QUOTE]

У меня Билдер пишет хрень какуюто: «can not convert char * to file *»,
причем тут чар? Не знаете что за ошибка?

Пользователь
Регистрация: 20.09.2007
Сообщений: 99

FILE *fp;
if( ( fp = fopen( «C:/Papka/file.txt», «w» ) ) == NULL )
puts( » Чего-то я не могу ваш файл открыть?!» );
getch();
exit();
>
fclose( fp );
puts( «А файл то уже пустой! «);

Голова человеку дадена — не токмо шапку носить!
Пользователь
Регистрация: 01.11.2007
Сообщений: 33
Сообщение от Adamant


FILE * fopen( «fname», «w» )
P.S. Позволю себе дать вам дружеский совет: если я не ошибаюсь, вы начали изучение сразу с C++. Не пожалейте месяца изучите хотя бы базовый курс простого Си.

Некоторые считают что Си может помешать правильному восприятию Си++ изначально так сказаать збитть с толку, хотя я не согласен. в принципе fstream может делать все что и FILE так что

fopen( "fname", "w" )

эквивалентно

file.open( "fname", ios::out )

Последний раз редактировалось PuzzleC; 26.11.2007 в 06:51 .
Пользователь
Регистрация: 20.09.2007
Сообщений: 99
Сообщение от PuzzleC

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

В этом есть рациональное зерно: все таки разное мышление. В Си — структурное, а в Си с плюсами все таки преимущественно объектно-ориентированное. Но на мой взгляд знание «простых Сей» лишним ни в коем случае не будет. Лично из моего опыта по самостоятельному изучения: ( если это кому-нибудь будет интересно). Начал изучать сразу с Сей с плюсами, как мне тоже посоветовали, но через месяц бросил (многое не мог понять), начал с Си (правда уже была база знаний в PHP), после этого у меня все пошло как по маслу, правда действительно иногда давало о себе знать структурное мышление, но оно со временем перестает доминировать). Еще раз подчеркиваю, это сугубо мое мнение, которое может не совпадать с вашим.
С уважением.

Голова человеку дадена — не токмо шапку носить!
Пользователь
Регистрация: 25.03.2007
Сообщений: 67
ifstream

Может немного не по теме, но если использовать namespase std, и обьявлять переменную тима ifstream, то после того как мы доходим до конца файла (-1 позиция) фаил становиться аьсолютно не доступен, т.е. его нельзя не закрыть функция close.filename и похицию поменять тоже нельзя seekg.filename пока я с правляюсь с этой проблемой просто записывая всё содержимое файла в стринговую переменную, но хотелось бы услышать возможность РЕШЕНИЯ проблемы а не её ОБХОЖДЕНИЯ как в моём случае

Как очистить файл используя файловые потоки ввода вывода не закрывая его?

Хочу открыть файл записать в него строку, потом, не закрывая файл, начать запись заново, так чтобы старая информация удалилась:

std::ofstream file; file.open("file.txt", std::ios_base::in | std::ios_base::out); file  

В результате получаю 1A а должно быть 1
Отслеживать
218k 15 15 золотых знаков 117 117 серебряных знаков 229 229 бронзовых знаков
задан 27 сен 2017 в 4:53
Rikitikitavi Rikitikitavi
2,409 4 4 золотых знака 20 20 серебряных знаков 36 36 бронзовых знаков
Вроде нельзя не закрывая файл
27 сен 2017 в 5:45
Если б было можно добраться до дескриптора файла, то может, мог бы спасти (нестандартный) chsize() .
27 сен 2017 в 5:53

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Стандартными средствами - никак.

Нестандартно - нужно получить файловый объект basic_filebuf с помощью rdbuf() , и в нем в конкретной реализации докапываться до файлового объекта - например, в VC++ - это закрытый член FILE* _Myfile . Если всяческими грязными хаками 🙂 добраться до него, то можно вызвать chsize(fileno(_Myfile)) . Но! это ОЧЕНЬ чревато неприятностями - как минимум работой через голову самого basic_filebuf , который, не подозревая о внесенных изменениях в состояние, может выдать совершенно неожиданное поведение.

Да и не стоит эта овчинка выделки. Зная, где должен заканчиваться файл - откройте новый и перепишите в него только нужное. Будет и надежнее, и проще.

Отслеживать
ответ дан 27 сен 2017 в 6:05
218k 15 15 золотых знаков 117 117 серебряных знаков 229 229 бронзовых знаков

  • c++
  • файлы
  • fstream
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *