![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 18.08.2010
Сообщений: 22
|
![]()
Имею типизированный файл, в записи массив и группа данных к нему. Пока размер исходного файла не превышал 2Гб задача не вызывала проблем. Определял указатели начала и конца фрагмента и копировал в новый файл по необходимости или фрагмент или всё кроме фрагмента. Хотелось бы разобраться как подобную задачу решить для случая если фрагмент находится за пределами 2Гб. Можете подсказать что принципиально меняется?
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Ваша вера в наши телепатические способности помогает скорейшему решению вашей проблемы.
Если не понятно: ГДЕ КОД? Навскидку: использовать TFileStream и позиционироваться через Int64.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#3 | |
Пользователь
Регистрация: 18.08.2010
Сообщений: 22
|
![]() Цитата:
Зачем код? Вопрос ведь задан иначе! Читаю нормально, правильно позиционируюсь в исходном файле ( Int64 ). Запись не получается!!! Не пойму как правильно писать выбранный из подобных файлов фрагмент!!! Мне хотелось бы аргументированный типичный базовый пример вполне типичной задачи. ЗЫ Денег нет и не требуйте! Последний раз редактировалось A_Ton; 18.08.2010 в 17:42. |
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Я тогда не понимаю вопроса. Потому что ничего там принципиально не меняется.
В чём проблема-то?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 18.08.2010
Сообщений: 22
|
![]()
>В чём проблема-то?
Запись не осуществляется. Удаётся создать только пустой файл, после некоторого времени работы процедуры вылетаю с этим пустым файлом. Вот часть кода с удалением фрагмента, удивлён что нет общего решения в Делфях ( мне это кажется странным для типичной задачи ): Hdc:=CreateFile(PChar(SaveFDlg.File Name),GENERIC_WRITE,0,nil, CREATE_NEW,FILE_FLAG_WRITE_THROUGH, 0); If Hdc=0 then Begin MessageBox(Handle,'Не могу открыть файл для копии!','Ошибка',MB_ICONERROR); Exit; end; for i:= 0 to NFrames-1 do begin if (i>=FrStPos) and (i<=FrEndPos) then continue; RdKadr(i); WriteFile(Hdc,RecFile,SizeOf(RecFil e),bytesWritten, nil); end; CloseHandle(Hdc); RdKadr(i) - читает прекрасно RecFile и пусть она Вас не смущает, многократно проверено в том числе и визуально. Извините, не могу нормально отобразить код на форуме. Последний раз редактировалось A_Ton; 18.08.2010 в 18:10. |
![]() |
![]() |
![]() |
#6 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
Если понял задачу, то проблема в том, что у вас в корне не верный подход. Зачем удалять куски из файла? Разумеется чтобы удалить запись (раз типизированный файл). А почему не пойти другим путем. К примеру, запись будет содержать флаг 0 - удален, 1 - занят. В таком случае, вам стоит всего лишь найти удаляемую запись и переписать всего 1 бит
![]() ![]() |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 18.08.2010
Сообщений: 22
|
![]()
Вы поняли правильно. NFrames - количество записей в фале, где-то до 4000.
Границы циклов определяю верно уже неск. лет, можно не сомневаться ![]() Исходный файл является ДОКУМЕНТОМ и редактированию НЕ ПОДЛЕЖИТ! Кроме того с файлом копией нужного участка девушкам работать легче и быстрее. Хранить и передавать когда их десятки в месяц тоже проще. Последний раз редактировалось A_Ton; 18.08.2010 в 18:30. |
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 18.08.2010
Сообщений: 22
|
![]()
>Подробно поясните, что это значит.
Создался пустой файл, программа ещё некоторое время проработала над копированием ( вижу индикацию ) , а затем завершается с ошибкой. Файл остаётся пустым. В том слуае если файл меньше 2ГБ всё проходит нормально. |
![]() |
![]() |
![]() |
#10 |
Погулять вышел
Участник клуба
Регистрация: 17.05.2010
Сообщений: 1,573
|
![]()
Если все раньше работало нормально, то не может эта ошибка быть из-за файловой системы? FAT16 (он не поддерживает файлы больше 2 ГБ) вместо FAT32?
Никогда не знаешь, где тебе повезет... (Фрай)
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Копирование/Удаление подкаталогов | Xanex | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 5 | 16.05.2010 20:40 |
Удаление и копирование формы | krikaved | Общие вопросы Delphi | 1 | 25.03.2010 12:56 |
Удаление фрагмента текста | Шурик | Общие вопросы Delphi | 0 | 31.05.2009 16:11 |
Как востановить фотографии с флешки в 2ГБ miniSD | Easyman | Компьютерное железо | 2 | 30.07.2008 13:45 |
Чтение фрагмента файла в динамический массив. | ZeroCool. | Общие вопросы Delphi | 2 | 02.11.2007 08:14 |