![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#21 |
Пользователь
Регистрация: 18.08.2010
Сообщений: 22
|
![]()
>(Выругался трёхэтажным матом) КАКОЙ ошибкой?
External Exception C0000017, эт при прогоне проги в среде Д7. Последний раз редактировалось A_Ton; 18.08.2010 в 20:07. |
![]() |
![]() |
![]() |
#22 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Ну вот. C0000017 - это Out of memory.
С этой информацией с хорошей вероятностью можно предположить, что проблема в вашей RdKadr.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#23 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
На всякий случай уточню: вы в курсе, что такое адресное пространство процесса и чему оно равно для 32-х разрядного процесса?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#24 | |
Пользователь
Регистрация: 18.08.2010
Сообщений: 22
|
![]() Цитата:
Процедура RdKadr от профи, при чтении пашет без проблем... Буфер содержит не только запись? Вот код ReadKadr: ---------------------- function FileSeek(Handle: Integer; const Offset: Int64; Origin: Integer): Int64; begin {$R-} Result := Offset; Int64Rec(Result).Lo := SetFilePointer(THandle(Handle), Int64Rec(Result).Lo, @Int64Rec(Result).Hi, Origin); {$R+} end; ---------------------- procedure RdKadr(Pos: Integer); begin try DatErr:=False; FileSeek(Hd,Int64(Pos) * Int64(SizeOf(TRecInFile)),0); FileRead(Hd,RecFile,SizeOf(TRecInFi le)); except DatErr:=True; { ShowMessage('Ошибка чтения файла видео!'); } end; end; Последний раз редактировалось A_Ton; 18.08.2010 в 22:02. |
|
![]() |
![]() |
![]() |
#25 | ||
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
В вашем коде, в вызовах CreateFile, WriteFile, CloseHandle нет ничего, что могло бы приводить к такой ошибке. Вывод? Проблема в коде, который вы не показали: RdKadr.
Цитата:
Цитата:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
Последний раз редактировалось GunSmoker; 18.08.2010 в 21:07. |
||
![]() |
![]() |
![]() |
#26 |
Пользователь
Регистрация: 18.08.2010
Сообщений: 22
|
![]()
>Он мог действовать в иных предположениях,
Нет, из его примера чтения файлов. >Я вижу здесь куски несвязного кода. Не горячитесь. ReadKadr использует функцию позиционирования и я её привёл вверху. Позиционирование/чтение из ReadKadr под функцией. Остальные детали только затруднят. Pos - то самое i в вызове ReadKadr(i); Последний раз редактировалось A_Ton; 18.08.2010 в 21:15. |
![]() |
![]() |
![]() |
#27 |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
![]()
Если из приведённых кусков ничего не добавляя (кроме переменных и пары строк на открытие/закрытие файла...) слепить всё это дело, то это дело нормально работает - проверил на файле 2,7 ГБ. Так что проверяем по F8 на какую строчку ругается, либо нормальный код показываем.
|
![]() |
![]() |
![]() |
#28 |
Пользователь
Регистрация: 18.08.2010
Сообщений: 22
|
![]()
>либо нормальный код показываем
Код показан. Нечего добавить. Вы проверяли с каким размером записи? Может в этом дело? Есть еще подозрение, что проблема возникает при переходе через 2Гб рубеж. Т.е если выбранный фрагмент этот рубеж не включает то всё нормально. >F8 Не реально. |
![]() |
![]() |
![]() |
#29 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Проблема сидит в остальных деталях. Вы ещё не поняли? С хорошей долей вероятности, проблема у вас вовсе не в файле, а в выделении памяти. Файл вообще не причём.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#30 |
Пользователь
Регистрация: 18.08.2010
Сообщений: 22
|
![]()
>Есть еще подозрение, что проблема возникает при переходе через 2Гб рубеж. Т.е если выбранный фрагмент этот рубеж не включает то всё нормально.
Проверил это предположение. Действительно если я оставляю только фрагмент находящийся ЗА(ДО) ПРЕДЕЛАМИ 2Гб то всё НОРМАЛЬНО. у меня это примерно после(ДО) 2100 записей. В случае если граница попадает в область копирования - вылетаю... Поясняю. 1. Удаляю область включающую границу, т.е. копирую то что за пределами 2Гб - норма. 2. Удаляю область включающую границу, но копирую то что до 2ГБ - пишет в файл, но завершается с ошибкой. 3. Удаляю область НЕ включающую границу, т.е. копирую то что до и за пределами 2Гб - создается файл 0 размера и вылетаю. И чего теперь делать? Последний раз редактировалось A_Ton; 18.08.2010 в 23:22. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Копирование/Удаление подкаталогов | 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 |