Как сделать запись в середину файла?
Подскажите, как с помощью класса fstream произвести запись информации в середину файла, но не поверх уже существующей информации, а между?
Запись в середину никак не получится сделать. Придется создавать новый файл, из которого в первый надо записать все то что идет после записи.
Запись в середину никак не получится сделать. Придется создавать новый файл, из которого в первый надо записать все то что идет после записи.
Ili zaleztj v seredinu fajla, potom vse ottud sdvinutj v konec, a potom pisatj v osvobodivshujusa seredinu.
Ili zaleztj v seredinu fajla, potom vse ottud sdvinutj v konec, a potom pisatj v osvobodivshujusa seredinu.
А как можно залезть в середину файла при записи ?
Ведь объект ofstream или fstream считает нулевым
адресом посленюю запись сделаную до открытия ?
Если знаеш как разъясни пожалусто или приведи кусок кода.
А как можно залезть в середину файла при записи ?
Ведь объект ofstream или fstream считает нулевым
адресом посленюю запись сделаную до открытия ?
Если знаеш как разъясни пожалусто или приведи кусок кода.
Залезть в середину файла можно с помощью функции seekg(), передавая ей один или два параметра: первый (тип long (int)) - позиция, в которую нужно установить курсор, второй (необязательный) выглядит так: ios::seek_dir::beg вместо beg может быть cur или end - откуда начинать отсчет при сдвиге курсора.
З.Ы.: При открытии курсор просто устанавливается в конец файла, если создан новый файл или открыт существующий в режиме ate.
Подскажите, как с помощью класса fstream произвести запись информации в середину файла, но не поверх уже существующей информации, а между?
Какого размера файл?
Если в ОЗУ помещается, то легче всего
1. Записать файл в ОЗУ
2. Записать в файл 1 кусок
3. Записать вставку
4. Записать в файл все, что осталось
Krakozabla, этот способ крайне неэффективен при работе с большими файлами, хотя он и является самым очевидным.
Вопервых что такое ОЗУ ? (народ я ещё чайник в С++ такчто объясняйте пожалуйсто по русски)
А во вторых можно привести для ясности отрывок кода.
Как открыть файл размером 100 байт напимер
и изменить в нём первые 8 байт.
Я лично столкнулся с тем что seekp(); считает нулевым адресом место после последней записи сделанной до закрытия файла.
Вопервых что такое ОЗУ ? (народ я ещё чайник в С++ такчто объясняйте пожалуйсто по русски)
А во вторых можно привести для ясности отрывок кода.
Как открыть файл размером 100 байт напимер
и изменить в нём первые 8 байт.
Я лично столкнулся с тем что seekp(); считает нулевым адресом место после последней записи сделанной до закрытия файла.
зайди на proglib.ru там есть книни по си братьев фроловых кажись том 26 или 27 точно не помню но под NT а так может что и найдешь
зайди на proglib.ru там есть книни по си братьев фроловых кажись том 26 или 27 точно не помню но под NT а так может что и найдешь
Не грузится у меня proglib.ru наверно ошибка в адресе.
И ещё вопрос на засыпку : Как проще всего (и эффективнее) проверить находится ли файл например vasya.txt на диске или нет .
#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));