|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
03.12.2015, 12:38 | #1 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Прочитать/записать указанный байт из большого файла
Здравствуйте.
Нужно открыть большой файл, не загружая его целеком в память, и прочитать из него указанные байты. И заменить их. Был уверен, что компонент TFileStream для этого подойдет. Но, как оказалось, он может читать и писать файлы только до позиции в 31 бит, то есть 2147483647. Если не ошибаюсь, используются 32-битные WinAPI'шные функции. Отсюда и ограничение. Подскажите способ обойти это ограничение (кроме перехода на 64-битную delphi). Знаю, что есть какой-то способ. Ведь есть 32-битные проги, которым это ограничение не помеха. Последний раз редактировалось BLACK_RAIN; 03.12.2015 в 12:45. |
03.12.2015, 13:10 | #2 |
Форумчанин
Регистрация: 29.10.2015
Сообщений: 273
|
|
03.12.2015, 13:14 | #3 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Цитата:
I'm learning to live...
|
||
03.12.2015, 15:18 | #4 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
на край пишите сами с использованием WinAPI.
32-битность винды тут не причем. Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
03.12.2015, 15:28 | #5 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Код:
Код:
I'm learning to live...
|
|
03.12.2015, 15:45 | #6 | |
Участник клуба
Регистрация: 09.11.2007
Сообщений: 1,761
|
Цитата:
Да вроде TFileStream всегда справлялся с большими файлами. По крайней мере я не замечал ограничений. |
|
03.12.2015, 16:04 | #7 | |||
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Цитата:
Код:
Цитата:
Однако, следует отметить, что метод seek() по прежнему ограничен 31-битным числом. Перемотка осуществляется с помощью свойства Position. Если кто юзал компонент TGpHugeFileStream, поделитесь опытом, как он вообще? Файлы какого размера открывает? Работает ли функция записи в большой файл? не косячит файлы от этого? Цитата:
Разве справлялся? Это же обёртка над FileOpen , FileSeek и т.д. Последний раз редактировалось Stilet; 03.12.2015 в 16:13. |
|||
03.12.2015, 16:13 | #8 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
См. выше )
I'm learning to live...
|
|
03.12.2015, 16:20 | #9 | |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
http://docs.embarcadero.com/products...4@Integer.html
В Delphi7: FileSeek в одном варианте исполнения Cardinal 32 бита Начиная с Delphi 2009 в двух вариантах 32 и 64 битное. Цитата:
Поэтому в Delphi7 имеется неудобство для работы с файлами более 2 ГБ. Но их легко обойти добавив нужные функции и методы в класс. Собственно их всего две Seek и Position. По поводу удивления того что в Delphi 7 всё работало и так. Можно и не добавлять. При циклическом чтение, когда смещение идёт относительно, а не абсолютное ОС отрабатывает нормально. И файлы больше 2ГБ будут нормально читаться и писаться.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . Последний раз редактировалось Pavia; 03.12.2015 в 16:26. |
|
03.12.2015, 16:23 | #10 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
stilet
а с фига я-то не внимательный? метод seek вызывает винапишный FileSeek, который 32-битный. Что еще тут можно добавить. Int64 в Integer ведь не засунешь. pavia Цикличиское чтение не удобно. Мне надо читать и писать рандомные участки файла. Последний раз редактировалось BLACK_RAIN; 03.12.2015 в 16:27. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как прочитать 7 первых байт файла ? | Konstantin_ua | Общие вопросы Delphi | 2 | 21.01.2014 17:40 |
Прочитать из первого файла и записать во второй символ (QBasic) | ulika | Помощь студентам | 1 | 28.12.2013 11:49 |
Прочитать из файла числа, отсортировать их по возрастанию, результат записать в новый файл. | lika1129970 | Паскаль, Turbo Pascal, PascalABC.NET | 7 | 02.04.2013 13:45 |
Прочитать из файла и записать в функцию | Ilya_L | Общие вопросы Delphi | 3 | 27.10.2010 15:48 |
как прочитать из файла имя, фамилию разделенные пробелами и записать их в массив парами | Rom@shka | Общие вопросы C/C++ | 2 | 13.12.2008 16:40 |