Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

2.1K
09 апреля 2004 года
Manyak
12 / / 08.01.2003
Подскажите, как с помощью класса fstream произвести запись информации в середину файла, но не поверх уже существующей информации, а между?
435
16 апреля 2004 года
avatara
188 / / 07.07.2003
Цитата:
Originally posted by Manyak
Подскажите, как с помощью класса fstream произвести запись информации в середину файла, но не поверх уже существующей информации, а между?


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

4.0K
17 апреля 2004 года
Enygma
34 / / 03.04.2004
Цитата:
Originally posted by avatara

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




Ili zaleztj v seredinu fajla, potom vse ottud sdvinutj v konec, a potom pisatj v osvobodivshujusa seredinu.

1.8K
18 апреля 2004 года
scanf
72 / / 10.12.2003
Цитата:
Originally posted by Enygma



Ili zaleztj v seredinu fajla, potom vse ottud sdvinutj v konec, a potom pisatj v osvobodivshujusa seredinu.



А как можно залезть в середину файла при записи ?
Ведь объект ofstream или fstream считает нулевым
адресом посленюю запись сделаную до открытия ?
Если знаеш как разъясни пожалусто или приведи кусок кода.

2.1K
28 апреля 2004 года
Manyak
12 / / 08.01.2003
Цитата:
Originally posted by scanf


А как можно залезть в середину файла при записи ?
Ведь объект ofstream или fstream считает нулевым
адресом посленюю запись сделаную до открытия ?
Если знаеш как разъясни пожалусто или приведи кусок кода.



Залезть в середину файла можно с помощью функции seekg(), передавая ей один или два параметра: первый (тип long (int)) - позиция, в которую нужно установить курсор, второй (необязательный) выглядит так: ios::seek_dir::beg вместо beg может быть cur или end - откуда начинать отсчет при сдвиге курсора.
З.Ы.: При открытии курсор просто устанавливается в конец файла, если создан новый файл или открыт существующий в режиме ate.

5.3K
29 апреля 2004 года
Krakozabla
32 / / 23.04.2004
Цитата:
Originally posted by Manyak
Подскажите, как с помощью класса fstream произвести запись информации в середину файла, но не поверх уже существующей информации, а между?


Какого размера файл?
Если в ОЗУ помещается, то легче всего
1. Записать файл в ОЗУ
2. Записать в файл 1 кусок
3. Записать вставку
4. Записать в файл все, что осталось

2.1K
29 апреля 2004 года
Manyak
12 / / 08.01.2003
Krakozabla, этот способ крайне неэффективен при работе с большими файлами, хотя он и является самым очевидным.
1.8K
29 апреля 2004 года
scanf
72 / / 10.12.2003
Цитата:
Originally posted by Manyak
Krakozabla, этот способ крайне неэффективен при работе с большими файлами, хотя он и является самым очевидным.



Вопервых что такое ОЗУ ? (народ я ещё чайник в С++ такчто объясняйте пожалуйсто по русски)
А во вторых можно привести для ясности отрывок кода.
Как открыть файл размером 100 байт напимер
и изменить в нём первые 8 байт.
Я лично столкнулся с тем что seekp(); считает нулевым адресом место после последней записи сделанной до закрытия файла.

4.8K
30 апреля 2004 года
guardian1
12 / / 11.11.2003
Цитата:
Originally posted by scanf


Вопервых что такое ОЗУ ? (народ я ещё чайник в С++ такчто объясняйте пожалуйсто по русски)
А во вторых можно привести для ясности отрывок кода.
Как открыть файл размером 100 байт напимер
и изменить в нём первые 8 байт.
Я лично столкнулся с тем что seekp(); считает нулевым адресом место после последней записи сделанной до закрытия файла.


зайди на proglib.ru там есть книни по си братьев фроловых кажись том 26 или 27 точно не помню но под NT а так может что и найдешь

1.8K
30 апреля 2004 года
scanf
72 / / 10.12.2003
Цитата:
Originally posted by guardian1

зайди на proglib.ru там есть книни по си братьев фроловых кажись том 26 или 27 точно не помню но под NT а так может что и найдешь



Не грузится у меня proglib.ru наверно ошибка в адресе.

И ещё вопрос на засыпку : Как проще всего (и эффективнее) проверить находится ли файл например vasya.txt на диске или нет .

2.1K
03 мая 2004 года
Manyak
12 / / 08.01.2003
Scanf, лови:
#include<fstream.h>
#include<iostream.h>
...
fstream f;
char My_string[8];
cin>>My_string;
f.open("My_file.txt",ios::out);
f.seekp(0,ios::seek_dir::beg);
f.write(My_string, sizeof(My_string));
f.close();
...
Здесь f.seekp(0,ios::seek_dir::beg) смещает курсор на 0 байт относительно начала файла. В f.write(My_string, sizeof(My_string)); передается два аргумента: первый - указатель на массив элементов типа char, второй - размер элемента, который ты записываешь. В случае, если надо записать значение другого типа, например int, код будет выгладеть так:
f.write((char*)&My_int, sizeof(int));
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог