Как очистить файл с fstream
#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 пока я с правляюсь с этой проблемой просто записывая всё содержимое файла в стринговую переменную, но хотелось бы услышать возможность РЕШЕНИЯ проблемы а не её ОБХОЖДЕНИЯ как в моём случае
Пользователь
Регистрация: 01.11.2007
Сообщений: 33
filename.clear(); // стереть флаг ошибки
По востижении EOF ios::state устонавливается в badbit, для дальнейшей работы надо badbit обнулить делает это функция член ios::clear();
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как удалить файл с русским именем? | Cricket2007 | Помощь студентам | 7 | 12.02.2008 17:51 |
Как удалить файл | dagarik | Общие вопросы Delphi | 9 | 05.12.2007 20:25 |
Помогите, Как программо удалить файл который находится на жестком диске. | niva622 | Помощь студентам | 3 | 19.04.2007 19:09 |
как удалить анти вирус( касперский 2006)если она не работает и ее не возможно удалить | Alar | Общие вопросы Delphi | 0 | 29.10.2006 21:36 |
Как очистить файл с fstream
Для работы с файлами в стандартной библиотеке определен заголовочный файл fstream , который определяет базовые типы для чтения и записи файлов. В частности, это:
- ifstream : для чтения с файла
- ofstream : для записи в файл
- fstream : совмещает запись и чтение
Для работы с данными типа wchar_t для этих потоков определены двойники:
- wifstream
- wofstream
- wfstream
Открытие файла
При операциях с файлом вначале необходимо открыть файл с помощью функции open() . Данная функция имеет две версии:
- open(путь)
- open(путь, режим)
Для открытия файла в функцию необходимо передать путь к файлу в виде строки. И также можно указать режим открытия. Список доступных режимов открытия файла:
- ios::in : файл открывается для ввода (чтения). Может быть установлен только для объекта ifstream или fstream
- ios::out : файл открывается для вывода (записи). При этом старые данные удаляются. Может быть установлен только для объекта ofstream или fstream
- ios::app : файл открывается для дозаписи. Старые данные не удаляются.
- ios::ate : после открытия файла перемещает указатель в конец файла
- ios::trunc : файл усекается при открытии. Может быть установлен, если также установлен режим out
- ios::binary : файл открывается в бинарном режиме
Если при открытии режим не указан, то по умолчанию для объектов ofstream применяется режим ios::out , а для объектов ifstream — режим ios::in . Для объектов fstream совмещаются режимы ios::out и ios::in .
std::ofstream out; // поток для записи out.open("hello1.txt"); // окрываем файл для записи std::ofstream out2; out2.open("hello2.txt", std::ios::app); // окрываем файл для дозаписи std::ofstream out3; out2.open("hello3.txt", std::ios::out | std::ios::trunc); // установка нескольких режимов std::ifstream in; // поток для чтения in.open("hello4.txt"); // окрываем файл для чтения std::fstream fs; // поток для чтения-записи fs.open("hello5.txt"); // окрываем файл для чтения-записи
Однако в принципе необязательно использовать функцию open для открытия файла. В качестве альтернативы можно также использовать конструктор объектов-потоков и передавать в них путь к файлу и режим открытия:
fstream(путь) fstream(путь, режим)
При вызове конструктора, в который передан путь к файлу, данный файл будет автоматически открываться:
std::ofstream out("hello.txt"); std::ifstream in("hello.txt"); std::fstream fs("hello.txt", std::ios::app);
В данном случае предполагается, что файл «hello.txt» располагается в той же папке, где и файл программы.
Вообще использование конструкторов для открытия потока является более предпочтительным, так как определение переменной, представляющей файловой поток, уже преполагает, что этот поток будет открыт для чтения или записи. А использование конструктора избавит от ситуации, когда мы забудем открыть поток, но при этом начнем его использовать.
В процессе работы мы можем проверить, окрыт ли файл с помощью функции is_open() . Если файл открыт, то она возвращает true:
std::ifstream in; // поток для чтения in.open(«hello.txt»); // окрываем файл для чтения // если файл открыт if (in.is_open())
Закрытие файла
После завершения работы с файлом его следует закрыть с помощью функции close() . Также стоит отметить, то при выходе объекта потока из области видимости, он удаляется, и у него автоматически вызывается функция close.
#include #include int main() < std::ofstream out; // поток для записи out.open("hello.txt"); // окрываем файл для записи out.close(); // закрываем файл std::ifstream in; // поток для чтения in.open("hello.txt"); // окрываем файл для чтения in.close(); // закрываем файл std::fstream fs; // поток для чтения-записи fs.open("hello.txt"); // окрываем файл для чтения-записи fs.close(); // закрываем файл >
Как очистить файл используя файловые потоки ввода вывода не закрывая его?
Хочу открыть файл записать в него строку, потом, не закрывая файл, начать запись заново, так чтобы старая информация удалилась:
std::ofstream file; file.open("file.txt", std::ios_base::in | std::ios_base::out); file
В результате получаю 1A а должно быть 1
Отслеживать
218k 15 15 золотых знаков 118 118 серебряных знаков 229 229 бронзовых знаков
задан 27 сен 2017 в 4:53
Rikitikitavi Rikitikitavi
2,409 4 4 золотых знака 20 20 серебряных знаков 37 37 бронзовых знаков
Вроде нельзя не закрывая файл
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 золотых знаков 118 118 серебряных знаков 229 229 бронзовых знаков
- c++
- файлы
- fstream
- Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.29.1670
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Удаления из файла данных (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.
Программа которая приведена в этой теме работает только если в файле один столбец.
Построчно считываем файл в вектор.Вводим слово.которое хотим удалить,удаляем его и перезаписываем файл.Например так.