Перейти к содержимому

Как закрыть файл в c

  • автор:

Открытие и закрытие файлов

В C++ файл открывается путем стыковки его с потоком. Имеется три типа потоков: ввода, вывода и ввода/вывода. Для открытия потока ввода необходимо объявить поток как объект класса ifstream. Для открытия потока вывода необходимо объявить его как объект класса ofstream. Потоки, кото­рые выполняют как ввод, так и вывод, должны быть объявлены как объекты класса fstream. На­пример, следующий фрагмент программы создает один поток ввода, один поток вывода и один поток, способный выполнять как ввод, так и вывод:

ifstream in; // ввод

ofstream out; // вывод

fstream both; // ввод и вывод

После создания потока единственным способом ассоциировать его с файлом является исполь­зование функции ореn(). Эта функция является членом каждого из трех классов потока. Она имеет следующий прототип:

void open(const char «filename, int mode, int access=filebuf::openprot);

Здесь filename является именем файла и может включать указание пути. Величина mode определя­ет, каким способом открывается файл. Mode может принимать одно или более из следующих значений, (определенных в заголовочном файле fstream.h):

Можно комбинировать два и более из этих значений, используя побитовое ИЛИ.

ios::app указывает на то, что выводимые данные будут добавляться в конец файла. Это значение может быть использовано только для файлов, для которых возможен вывод. Использование ios::ate вызывает поиск конца файла в момент открытия файла.

ios::in задает возможность ввода из файла. ios::out указывает, что файл предназначен для выво­да. Однако создание потока с использованием ifstream задает режим ввода, а создание потока с использованием ofstream задает режим вывода, и в этих случаях нет необходимости задавать ука­занные выше величины.

ios::nocreate задает такой режим, при котором функция open() может открыть только существу­ющий файл. ios::noreplace не позволяет открыть файл функции ореn(), если файл уже существует, но не указаны атрибуты ios::ate или ios::app.

ios::trunc обусловливает уничтожение содержимого файла с заданным именем и усечение дли­ны файла до нуля.

Режим ios::binary обусловливает открытие файла для двоичных операций. Это означает, что не будет никаких преобразований символов.

Величина access определяет, каким образом осуществляется доступ к файлу. Значения атрибута файлов определяются следующим образом:

Атрибут Значение
0 Нормальный файл, отрытый доступ
1 Файл только для чтения
2 Скрытый файл
4 Системный файл
8 Архивный файл

С помощью операций побитового ИЛИ можно задать одновременно несколько атрибутов. Обычно эти атрибуты оставляются по умолчанию, что соответствует filebuf::openprot и соответ­ствует нормальному файлу.

В следующем фрагменте открывается нормальный файл для вывода:

ofstream out;
out.open ( «test», ios::out, 0);

Тем не менее, практически никогда не бывает подобного вызова функции ореn(), поскольку оба параметра имеют значения по умолчанию: для ifstream значением по умолчанию mode служит ios::in; а для ofstream значение по умолчанию равно ios::out. Параметр доступа access по умолча­нию соответствует нормальному файлу, как это уже отмечалось выше. Поэтому предыдущая инст­рукция будет выглядеть следующим образом:

out.open(«test»); // значения по умолчанию для вывода и нормального файла

Для того, чтобы открыть поток одновременно для ввода и вывода, необходимо задать обе вели­чины ios::in и ios::out для режима mode, как показано в следующем примере:

fstream mystream;
mystream.open(«test», ios::in | ios::out);

Если функции open() не удается открыть поток, то поток остается равным NULL.

Хотя открытие файла с использованием функции ореn() является вполне допустимым, в боль­шинстве случаев так не делается, потому что классы ifstream, ofstream и fstream содержат конст­рукторы, автоматически открывающие файл. Конструкторы имеют те же параметры и значения по умолчанию, что и функция ореn(). Поэтому наиболее типичный способ открытия файла вы­глядит следующим образом:

ifstream mystream(«myfile»); // открытие файла для чтения

Если по каким-либо причинам файл не может быть открыт, значение ассоциированного потока будет равно NULL. Можно использовать следующий код для того, чтобы убедиться, что файл действительно открыт:

ifstream mystream(«myfile»); // открытие файла для чтения
if (!mystream) cout >

Для того, чтобы закрыть файл, следует использовать функцию-член close(). Например, чтобы закрыть файл, пристыкованный к потоку mystream, используется следующая инструкция:

Функция close() не имеет ни параметров, ни возвращаемого значения.

Как правильно закрыть файл?

Для fopen() fclose(), для popen() pclose(), для opendir() closedir(), для open() и socket() close().

Вообще, внимательно смотрите на типы результатов функций и SEE ALSO в man.

Отслеживать
ответ дан 18 авг 2011 в 21:36
45.8k 6 6 золотых знаков 45 45 серебряных знаков 115 115 бронзовых знаков

лучше используйте std::ifstream, std::ofstream. с ними как-то проще всё..

Отслеживать
ответ дан 18 авг 2011 в 20:45
480 3 3 серебряных знака 14 14 бронзовых знаков

Нужно использовать файловую переменную, т.е.

FILE *fh; //И потом так: fh = fopen("d:\1.txt", "rt"); 

Нас в универе учили так 🙂

Отслеживать
ответ дан 18 авг 2011 в 20:57
2,778 2 2 золотых знака 17 17 серебряных знаков 27 27 бронзовых знаков
Ну и учителя .
18 авг 2011 в 21:38
А что не так-то?
19 авг 2011 в 6:16

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

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

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

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

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

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

Открыть, сохранить, закрыть файл

программа осуществляет обработку данных из файла.Главное меню имеет вид:
1)файл
2)редактировать документ
3).
Вид меню «Файл»:
1)открыть
2)сохранить
3)закрыть.
вопрос вот в чем, как осуществить отдельно все пункты меня «файл»? что должны делать эти функции?

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Открыть файл и сохранить туда любую информацию
У меня небольшой вопрос. Как с помощью сишных функций работы с файлами, организовать открытие.

Как открыть файл xlsx и сохранить в txt?
Написать консольное windows приложение на Visual C++ со следующим функционалом: — на вход.

Открыть бинарный файл(.ехе) и сохранить часть байтов в текст
Всем привет. Задача такая: нужно прочитать .exe. в конце его есть некие спецсимволы, которые мне.

Как открыть/закрыть дверцу CDROM?
Ну вобщем-то как. И еще вопрос как отследить выключение компьютера и предотвратить его?

Регистрация: 04.08.2010
Сообщений: 434
Встречный вопрос: программа консольная/оконная?
Регистрация: 01.11.2009
Сообщений: 60
консольная.
Регистрация: 11.04.2010
Сообщений: 223

Ну это же просто текстовый редактор.
1Открыть — значит занести имя файла в память проги, и скопировать содержимое файла в буфер.
2Сохранить- значит записать содержимое буфера в файл с именем из пункта 1
3 Закрыть — очистить буфер, удалить имя из памяти

2)редактировать документ

— работа над буфером, сдесь все будет посложнее, хотя все тоже просто.
Наш буфер — строка. Что нам нужно?
1 реализовать удаление символа из любого места
2 реализовать добавление символа в любое место
3 зарезервировать клавишу выхода из редактирования
4 вывод инфы на экран. При этом нужно знать кол-во символов в строке и столбце консоли. Это нужно для передвижения курсора по экрану.
5 И т.д.

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

Как программно закрыть файл?

Как программно скопировать файл.
OpenDialog1->Execute(); DBEdit10->Text=OpenDialog1->FileName; Как реализовать, чтоб выбраный.

Как программно удалить указанный файл!
Как программно удалить указанный файл!Наверное вы подумаете что это глупый вопрос! Я это мог.

Как программно экспортировать ветку реестра в файл?
Причем не какой-то отдельный параметр, а ветку целиком. Пробовал запустить reg.exe с параметрами.

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

Супер-модератор

Эксперт Pascal/DelphiАвтор FAQ

32775 / 21118 / 8141
Регистрация: 22.10.2011
Сообщений: 36,377
Записей в блоге: 8
Регистрация: 25.03.2019
Сообщений: 140

Да, я хотел именно это, но я так и не смог написать рабочую программу с ShellExecuteEx();
Может, можете привести свой пример?
Пока что работает только это:

1 2 3 4
HWND hMsg=NULL; hMsg = FindWindow(NULL, "ИНФОРМАЦИЯ"); SendMessage(hMsg, WM_CLOSE, 0, 0); hMsg = NULL;

Супер-модератор

Эксперт Pascal/DelphiАвтор FAQ

32775 / 21118 / 8141
Регистрация: 22.10.2011
Сообщений: 36,377
Записей в блоге: 8

В чем проблема? Есть же код в MSDN, неужели трудно попробовать?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
SHELLEXECUTEINFO sei; void __fastcall TForm1::Button1Click(TObject *Sender) { String path = L"C:\\test\\text.txt"; sei.cbSize = sizeof(SHELLEXECUTEINFO); sei.fMask = SEE_MASK_NOCLOSEPROCESS; // это чтобы возвращался хендл процесса sei.hwnd = NULL; sei.lpVerb = NULL; sei.lpFile = path.c_str(); sei.lpParameters = NULL; sei.lpDirectory = NULL; sei.nShow = SW_NORMAL; sei.hInstApp = NULL; ::ShellExecuteEx(&sei); } void __fastcall TForm1::Button2Click(TObject *Sender) { ::TerminateProcess(sei.hProcess, 0); }

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

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