Russian Qt Forum

Программирование => С/C++ => Тема начата: max1983 от Июль 25, 2009, 21:49



Название: Изменить файл без его перезаписи
Отправлено: max1983 от Июль 25, 2009, 21:49
Изменить файл без его перезаписи

Если добавлять инфу в конец файла то проблем нет.
А мне надо изменить середину.
Удалить или добавить данные.


Название: Re: Изменить файл без его перезаписи
Отправлено: f-r-o-s-t от Июль 25, 2009, 23:36
http://lmgtfy.com/?q=%D0%A1%2B%2B+%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0+%D1%81+%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%D0%BC%D0%B8


Название: Re: Изменить файл без его перезаписи
Отправлено: max1983 от Июль 26, 2009, 00:00
http://lmgtfy.com/?q=%D0%A1%2B%2B+%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0+%D1%81+%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%D0%BC%D0%B8
Тут понимаешь стандартные подходы не годятся.
И не надо посылать всех на Хугл.
Стандартные функи по моему ток перезапись умеют, максимум добавлять в конец файла.
Ты наверно знаеш чегото чего я не знаю..
Поделись.. чаво скромничаеш  гуглом.


Название: Re: Изменить файл без его перезаписи
Отправлено: f-r-o-s-t от Июль 26, 2009, 00:07
QIODevice::seek =)


Название: Re: Изменить файл без его перезаписи
Отправлено: max1983 от Июль 26, 2009, 01:54
=)
А довольный какой  ::)

А я вот даже и не думал что средствами QT можно решить ету задачу.
Ну с меня пыво.
Ну и прощаю тебе за гугл  ;D


Название: Re: Изменить файл без его перезаписи
Отправлено: f-r-o-s-t от Июль 26, 2009, 12:11
Ну и прощаю тебе за гугл  ;D

А я тебя за незнание С и С++.


Название: Re: Изменить файл без его перезаписи
Отправлено: max1983 от Июль 26, 2009, 15:48
Цитировать
А я тебя за незнание С и С++.

А вот и попался!
В чистом С++ таких функций нет.
Ну а С вроде не далек от С++.


Название: Re: Изменить файл без его перезаписи
Отправлено: denka от Июль 26, 2009, 15:57
Цитировать
А я тебя за незнание С и С++.

А вот и попался!
В чистом С++ таких функций нет.
Ну а С вроде не далек от С++.

Я вам уже писал учить мать часть. Еще раз напишу. Учите С++ в частности стандартную библиотеку


Название: Re: Изменить файл без его перезаписи
Отправлено: spectre71 от Июль 26, 2009, 15:59
Вставки в файл не бывает!
Можно воспользоваться seek для позиционирования и перезаписи;
Вставка делается через перезапись хвоста!


Название: Re: Изменить файл без его перезаписи
Отправлено: denka от Июль 26, 2009, 16:07
А смысл того что ты ему это рассказываешь? Человек не удосужился поработать со стандартдатной библиоткей ввода-вывода, зато какими речами кидаеться


Название: Re: Изменить файл без его перезаписи
Отправлено: f-r-o-s-t от Июль 26, 2009, 16:27
А вот и попался!
В чистом С++ таких функций нет.
Ну а С вроде не далек от С++.

как уже написали выше, и там и там есть.


Название: Re: Изменить файл без его перезаписи
Отправлено: spectre71 от Июль 27, 2009, 08:04
Цитировать
Вставки в файл не бывает!
Можно воспользоваться seek для позиционирования и перезаписи;
Вставка делается через перезапись хвоста!

и кстати бывает...
ток там как-то на низком уровне к диску где-то чтал когда-то.
вот найти не могу.
Да имне интересно мож кто знает из форумчан другие способы.

Доступ на низком уровне не переносим. Зависит от платформы, операционки, файловой системы итд.
Использовать его себе дороже.

1) Если файл не большой
   - если вставка одиночна или редка. Проще его перезаписать.
   - если вставка частая, в память его! По завершению операций перезаписать.
2) Если файл большой
   - если вставка одиночна. Проще его перезаписать.
   - если вставка частая, в память или во временные файлы нужные куски! По завершению операций перезаписать.
3) Если работаете с обновляемыми записями данных, выборками итд., пользуйтесь базами данных.
4) Есть еще такие средства как File Mapping, используется в основном для множественных случайных опереций чтения.

Вообще, что и как делать зависит от конкретной задачи.


Название: Re: Изменить файл без его перезаписи
Отправлено: max1983 от Июль 27, 2009, 08:43
Цитировать
2) Если файл большой
   - если вставка одиночна. Проще его перезаписать.

Если файл 500 метров а оперативки у юзера 128 и места в Temp исчерпано
А удалить нао из середины структуру на 10 метров
Конечн  можн юзать базы данных но для хранения примитивных одинаковых структур думал можн обойтись.



Название: Re: Изменить файл без его перезаписи
Отправлено: spectre71 от Июль 27, 2009, 09:31
Цитировать
2) Если файл большой
   - если вставка одиночна. Проще его перезаписать.

Если файл 500 метров а оперативки у юзера 128 и места в Temp исчерпано
А удалить нао из середины структуру на 10 метров
Конечн  можн юзать базы данных но для хранения примитивных одинаковых структур думал можн обойтись.
В данном случае именно перзаписывать файл! Подругому никак.

Теперь про комп. Встречные вопросы :)
1) А если юзер бугалтер, работает только на калькуляторе, как ему записать на него файл?
2) А если у него винт сдох, как ему перезаписать файл?
3) А если он абсолютный тормоз, как ему перезаписать файл?
4) Я хочу поставить себе крутую совтину, ей надо 500 метров на диске, а у меня только 100! Что мне делать?




Название: Re: Изменить файл без его перезаписи
Отправлено: spectre71 от Июль 27, 2009, 09:39
Цитировать
2) Если файл большой
   - если вставка одиночна. Проще его перезаписать.

Если файл 500 метров а оперативки у юзера 128 и места в Temp исчерпано
А удалить нао из середины структуру на 10 метров
Конечн  можн юзать базы данных но для хранения примитивных одинаковых структур думал можн обойтись.
А вообще то, можно работать и с одним файлом (чтение/запись), расширять его, уменьшать, перзаписывать в нем куски.
Конкретное решение всегда зависит от конкретной задачи и ресурсов. А придумывать абстракции не имет смысла!


Название: Re: Изменить файл без его перезаписи
Отправлено: Alex Custov от Июль 27, 2009, 10:44
Цитировать
2) Если файл большой
   - если вставка одиночна. Проще его перезаписать.

Если файл 500 метров а оперативки у юзера 128 и места в Temp исчерпано
А удалить нао из середины структуру на 10 метров
Конечн  можн юзать базы данных но для хранения примитивных одинаковых структур думал можн обойтись.

пиши свой алгоритм на fseek()/fread()/fwrite(). Читать блоки данных с определённого места, скажем по 4096 байт, и писать их на 10 Mb выше чем они были. Таким образом можно удалить что-то в середине файла. И truncate не забыть сделать, например через truncate() из unistd.h.


Название: Re: Изменить файл без его перезаписи
Отправлено: max1983 от Июль 27, 2009, 10:51
Цитировать
Теперь про комп. Встречные вопросы
даже на не плохой машине очевидны зависания при считывании такова объема в память.


Цитировать
пиши свой алгоритм на fseek()/fread()/fwrite(). Читать блоки данных с определённого места, скажем по 4096 байт, и писать их на 10 Mb выше чем они были. Таким образом можно удалить что-то в середине файла. И truncate не забыть сделать, например через truncate() из unistd.h.
Думаю эт то что мне надо спс всем.


Название: Re: Изменить файл без его перезаписи
Отправлено: Admin от Июль 27, 2009, 11:18
ТС все объяснили. Тему закрыл.