- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Если файл больше чем выделенная память и нужно удалить часть данных файла, то получается, никак?
Перерыл мануаль, ничего не нашел.
Неужели единственный вариант, это создавать временный файл?
Можно fgets исходный файл, и лить в другой с помощью fputs.
Можно fgets исходный файл, и лить в другой с помощью fputs.
Это и есть вариант с временным файлом.
а ведь таки нет такого, как delete($fp,$pos,$length)
Вот это называется приплыли 😂
Не ожидал от php такого
Раз позиция чтения и позиция записи в файле между собой не связаны.
значит, читая и записывая блоками в разные позиции можно перезаписать середину данными из конца и тем самым сократить файл.
разумеется, через программу придется "прокачать" весь остаток файла и это не очень быстро.
netwind добавил 23.11.2011 в 23:20
Не ожидал от php такого
а в какой ОС или языке это есть?
Можно fgets исходный файл, и лить в другой с помощью fputs.
а если влить в тот самый?:)
rommer добавил 23.11.2011 в 23:22
Раз позиция чтения и позиция записи в файле между собой не связаны.
значит, читая и записывая блоками в разные позиции можно перезаписать середину данными из конца и тем самым сократить файл.
разумеется, через программу придется "прокачать" весь остаток файла и это не очень быстро.
Лучше уж временный
а в какой ОС или языке это есть?
да в любом. Во всяком случае в дельфах и сях точно есть. правда, там со стримами работа, а не с указателями.
Лучше уж временный
но временный потребует в 2 раза больше места на диске и затратам на поиск этого места.
да в любом. Во всяком случае в дельфах и сях точно есть. правда, там со стримами работа, а не с указателями.
утютю.
Суть проблемы в том, что классические библиотеки ввода-вывода "ортогональны". то есть состоят из набора функций, которые друг друга не дублируют или дублируют в крайних случаях.
Если возможно реализовать удаление блока внутри файла с помощью других элементарных функций, значит их не будут делать. это было нужно для переносимости ОС и стандартной библиотеки. Чем меньше функций нужно реализовать тем, легче их перенести. Для delphi и windows вообще, подобный вопрос не стоял.
А php с той же самой целью копирует функции стандартной библиотеки С.
но временный потребует в 2 раза больше места на диске и затратам на поиск этого места.
утютю.
Суть проблемы в том, что классические библиотеки ввода-вывода "ортогональны". то есть состоят из набора функций, которые друг друга не дублируют или дублируют в крайних случаях.
Если возможно реализовать удаление блока внутри файла с помощью других элементарных функций, значит их не будут делать. это было нужно для переносимости ОС и стандартной библиотеки. Чем меньше функций нужно реализовать тем, легче их перенести. Для delphi и windows вообще, подобный вопрос не стоял.
А php с той же самой целью копирует функции стандартной библиотеки С.
а ну рахз утютю, то тогда вопросов больше нема.
Токо имейте в виду, что ц и делфи именно удаляют куски, а не перезаписывают весь файл.
rommer добавил 24.11.2011 в 01:03
Народ, кто знает, если открыть два указателя на один файл, то пройдет чтение/запись на разных операционках?
да в любом. Во всяком случае в дельфах и сях точно есть. правда, там со стримами работа, а не с указателями.
Ну-ка расскажи нам про Си. Учти, что Ритчи смотрит на тебя и будет рагневан, если ты назовешь языком Си какие-то вариации на тему.
Какие такие стандартные функций ANSI C позволяют удалить кусок файла?
Неужели единственный вариант, это создавать временный файл?
Ну почему же?
Изучите возможности работы с бинарными файлами. В общем случае решение поставленной задачи сведется к:
- открытие на запись\чтение
- нахождения начала ненужного куска
- нахождения конца ненужного куска
- побайтовое копирование информации с учетом сдвига и обнуление "хвоста"
Однако нужно понимать, что физический размер файла не уменьшится, так как в конце будут "нули".
Функций "вырезания" из файла на диске не существует в силу ряда ограничений. Поэтому любые операции с файлами сводятся к работе через временные файлы.
Ну почему же?
Изучите возможности работы с бинарными файлами. В общем случае решение поставленной задачи сведется к:
- открытие на запись\чтение
- нахождения начала ненужного куска
- нахождения конца ненужного куска
- побайтовое копирование информации с учетом сдвига и обнуление "хвоста"
Однако нужно понимать, что физический размер файла не уменьшится, так как в конце будут "нули".
Функций "вырезания" из файла на диске не существует в силу ряда ограничений. Поэтому любые операции с файлами сводятся к работе через временные файлы.
Очевидно это единственная возможность решения без создавания временных файлов.
Есть вопрос: если открыть два указателя на один файл (чтобы сразу считывать через один указатель и сразу писать на второй), то пройдет такое на разных операционках?