![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
BlHol, Да, если прямо пишешь ofstream файл создается, так как это аналогично fstream("...",ios::out) (как я уже говорил файл будет создан почти в любом случае, кроме недоступности исходного места, либо явного предписания nocreate или noreplace).
Указывать флаги можешь все, но тогда файл уже должен быть создан. Я так понимаю выходом в твоем случае будет хрень, типа:
|
|||
|
||||
BlHol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
ВО!!!! Вот теперь все точки над Ё расставлены...
Спасибище огромадное... С уважением. |
|||
|
||||
BlHol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
Однако, здравствуйте!
Нарисовался следующий трабл... Если файлика нет и мы открываем его на запись (только флаг ios::out), то при следующем открытии файла все существующие записи затираются. Посему вопрос: Каким образом проверяется существование файла? Т.е. в итоге задачка такова: если файла нет, то он создается и в него что-то пишется, если он есть, то открывается таким образом, чтоыб его содержимое не уничтожалось. Заранее спасибо. С уважением... |
|||
|
||||
dizzy1984 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 15.2.2007 Репутация: 3 Всего: 25 |
|
|||
|
||||
BlHol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
С чем сравнивается out в данном случае?
|
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
тут чтоли? здесь ничего не сравнивается, только кроме устанавливаемого бита, определяемого ios::out также устанавливается бит ios::app (append, "добавлять"), вместе они говорят о том, что файл будет открыт для дозаписи. |
|||
|
||||
BlHol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
Дописываться будет в конец?
Дело в том, что в данный файл пишется с произвольной выборкой. Т.е. сейчас у меня запись №3, а при следующем открытии файла №1. |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
BlHol, Да, указатель будет вставать в конец и дописываться по-любому будет в конец.
Мне кажется тут лучше сгружать все данные файла в память, манипулировать данными там, затем открывать файл и писать туда из памяти. |
|||
|
||||
BlHol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
Там задачка такая. Открывается файл, вводится номер записи и по этому номеру пишутся данные. Считывание происходит также по номеру записи (они идут по порядку от начала к концу файла). Фишка в том, что я могу сначала записать больший номер (скажем, 10), а затем меньший (например, 2) и одно не затрет другое. Поэтому, если открывать файл только с ios::binary | ios::out, то при следующем открытии новая инфа затирает старую. А если с ios::binary | ios::out | ios::in, то файл должен уже существовать. Вот и требуется, чтобы если файла нет, то он должен создаваться и открываться с ios::binary | ios::out, а если он уже есть, то с ios::binary | ios::out | ios::in, чтобы не затирать то, что было записано при предыдущем открытии.
|
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Так вот так можно. Можно штатными функциями WinApi проверять есть ли файл. Но можно, по-моему, вполне так - в итоге один фиг.
|
|||
|
||||
BlHol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
Спасибо, но почему-то при использовании fbin.clear() не работает. Срабатывает только при закомментареном fbin.clear(). С чего бы это?
|
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
BlHol, у меня данный код работал должным образом. Флаги состояния, по идее, надо сбрасывать, так как если файла не будет существовать, нам будет всегда выбрасывать сообщение, мол, не могу создать файл.
|
|||
|
||||
BlHol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
С вашего позволения, немного продолжу.
Попытался решить задачу через switch - case, т.е. предлагаю варианты (записи, чтения, выхода). В каждом из case реализую открытие файла сообразно выбранному варианту. Почему-то выдает ошибку case bypasses initialization of local variable. Это к чему? Заранее спасибо. |
|||
|
||||
betal |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 26.12.2006 Репутация: нет Всего: 1 |
![]() ![]() ![]() блин по этому поводу и добавить т нечго. Приходится молча кивать головой ![]() --------------------
101100010100001101100001110100101111011легкие деньги |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |