Delphi ошибка при открытии файла

Обновлено: 27.11.2022


тут не смеяться - тут плакать надо :cool:
если человек, не дав себе труда хотя бы задать в гугле поиск по ключевому слову "редактирование exe-файла", движок игры редактировать собираеться.

Я не просил разьяснять мне морали каким образом мне редактировать движок игры.я спросил как мне открыть dll файл.За помощь буду благодарен а лишнего попрошу не писать.

Я вот в гугле зашел и попал на этот сайт

Я не просил разьяснять мне морали каким образом мне редактировать движок игры.я спросил как мне открыть dll файл.За помощь буду благодарен а лишнего попрошу не писать.

Я вот в гугле зашел и попал на этот сайт


Ну это в принципе не повод - сразу же задавать идиотские вопросы и еще и с таким гонором - тем более что на сайте есть информация о структуре исполнимых файлов, методов работы с ними - и т.д. Лучше попросить у мамы денег и купить какой нибудь занимательный журнальчик о компьютерах.
Тема в общалку.

прикольно, на выходных не заходил на сайт, но тема подняла настроение в этот скучный понедельник. Предлагаю автору отказаться от использования Дельфи - на нем пишут ламмеры, и открывать библиотеку при помощи блокнота, сразу-же внося изменения в машинный код. =)

Dart Bobr, блокнот неправильно обрабатывает ДЛЛки! Там проблемы с кодировкой! Хотите удостовериться - откройте ДЛЛ блокнотом. Вроде, у Висты пофиксили. Неплохая программа - DLL EXPERT EDITOR. ;)

Да уж.
Только апрель месяц - а лидеры гонки на самый идиотский вопрос года уже помоему определились :)
Пальму первенства несомненно держит вопрос про юникс, но у топикстартера тоже шансы есть :)

Редактировать dll-ку прямо из под delphi-жесть. А вообще юзай текомпилкятор (тюфу, тоо есть декомпилятор). Как выхлоп он тебе выдаст исходник библиотеки, если смможет. Только может и не на дельфи.

Редактировать dll-ку прямо из под delphi-жесть. А вообще юзай текомпилкятор (тюфу, тоо есть декомпилятор). Как выхлоп он тебе выдаст исходник библиотеки, если смможет. Только может и не на дельфи.


Йаду поюзай. Побольше. Чтоб выхлоп был.
Тебя предупреждали за поднятие мёртвых тем.

Временами при работе с файлами в языке Delphi попытка открыть файл завершается неудачным образом и вызывает ошибку времени выполнения данной программы. Причинами ошибки открытия файлов Delphi могут быть следующие факторы.

К примеру, программа пытается открыть файл, расположенный на гибком диске, которой еще не готов к работе (не закрыт механизм дискового накопителя, либо диск отсутствует в накопителе).

Ошибки открытия файлов Delphi

Ошибки открытия файлов Delphi

Для того, чтобы программа самостоятельно контролировала результат исполнения операции открытия файла, нужно провести проверку значения функции IOResult (что означает результат ввода/вывода: Input-Output – ввод-вывод, а Result — результат). Функция IOResult принимает значение 0 в случае успешного завершения операции ввода/вывода, иначе возникает код ошибки (не 0).

Автоматическая обработка ошибок Delphi

Для обеспечения возможности проверки программой результата выполнения инструкций ввода/вывода следует разрешить программе это делать. Поэтому перед инструкцией, осуществляющей вызов процедуры открытия файла, необходимо указать директиву компилятору – строку для запрета автоматической обработки возможных ошибок ввода/вывода.

Данная директива как бы сигнализирует компилятору, что программа сама будет осуществлять контроль возможных ошибок. Следом за инструкцией открытия файла не забудьте указать директиву для восстановления автоматической обработки возможных ошибок ввода/вывода.

На рис. ниже представим блок-схему алгоритма, реализующего открытие файла для добавления, которое обеспечит создание файла ( и в результате устранит ошибку, возникающую при возможности открытия несуществующего файла) в том случае, если открываемый для добавления файл отсутствует на диске.

Ошибки открытия файлов Delphi

Предложим фрагмент программы, который реализует вышеприведенный алгоритм действий.

. . .
AssignFile(fn,filename);

Append(fn) // открываем файл для добавления в него информации

if IOResult<> 0 // ошибка открытия файла then
Rewrite(fn); // открыть файл для записи
// здесь открыт существующий или новый файл
. . .

Перед окончательным завершением своей работы программой должны быть закрыты все открытые файлы. Чтобы это осуществить в языке Delphi, нужно сделать вызов процедуры close. Данная процедура содержит всего лишь один параметр – наименование файловой переменной.

Пример

откуда fn обозначает имя файловой переменной. Итак, мы разобрали некоторые ошибки открытия файлов Delphi. Двигаемся дальше.

Обычно, в процессе выполнения первоначальные данные в программу вводятся пользователем с клавиатуры – такой способ использования исходных данных порой занимает определенное время. Однако в языке Delphi, как и в других языках программирования, программа может считывать первичные данные, например, из текстового файла.

Осуществим ввод из файла Dephi, следуйте следующей пошаговой рекомендации:

  1. объявление файловой переменной типа TextFile,
  2. назначение этой файловой переменной (применяя функцию AssignFile) имени файла, из которого первичные данные будут вводиться,
  3. открытие файла для чтения,
  4. чтение (ввод) данных с использованием инструкции read или readln.

Открытие файла для чтения Delphi:

Чтобы открыть файл для ввода(чтения), используют процедуру Reset, обладающей одним параметром – файловой переменной. Перед вызовом данной процедуры нужно связать файловую переменную с конкретным(реальным) файлом при помощи функции AssignFile.

Пример. (Вызов инструкции открытия файла для ввода):

В случае неверного указания имени файла (например, файл с данным именем отсутствует на диске) происходит возникновение ошибки времени выполнения программы.

Также отметим, что другая причина появления ошибки при открытии файла, который находится на гибком диске, связана в большей степени с отсутствием готовности дисковода (другими словами, диск отсутствует в накопителе). На основе этого в программе необходимо учесть вероятность повторного открытия файла после того, как было подтверждено повторение операции.

Как и в случае открытия файла для записи, программой может быть проведена обработка возможной ошибки в момент открытия файла, используя проверку значения функции IOResult. Ниже представим фрагмент исходного кода программы, в котором проводится проверка результата открытия файла с применением функции lOResult.

Пример. (Обработка ошибки при открытии файла (используется функция IOResult Delphi))

Delphi site: daily Delphi-news, documentation, articles, review, interview, computer humor.

Как было сказано выше, в программе, во время ее работы, могут возникать ошибки, причиной которых, как правило, являются действия пользователя. Например, пользователь может ввести неверные данные или, что бывает довольно часто, удалить нужный программе файл.

Инструкция обработки исключения в общем виде выглядит так: try

// здесь инструкции, выполнение которых может вызвать исключение

on ТипИсключенияJ do Обработка J; else // здесь инструкции обработки остальных исключений

else - ключевое слово, за которым следуют инструкции, обеспечивающие обработку исключений, тип которых не указан в секции except.

Как было сказано выше, каждое исключение характеризуется типом. В табл. 13.1 перечислены наиболее часто возникающие исключения и указаны причины, которые могут привести к их возникновению.

Таблица 13.1. Типичные исключения

При выполнении операции деления, если делитель равен нулю

При выполнении преобразования, если преобразуемая величи-

на не может быть приведена к требуемому виду. Наиболее часто

возникает при преобразовании строки символов в число

При обращении к файлу. Наиболее частой причиной является

отсутствие требуемого файла или, в случае использования

сменного диска, отсутствие диска в накопителе

Следующая программа, вид ее диалогового окна приведен на рис. 13.3, а текст - в листинге 13.1, демонстрирует обработку исключений при помощи инструкции try.


Рис. 13.3. Диалоговое окно программы

! Листинг 13.1. Обработка исключения

Editl: TEdit; // напряжение

Edit2: TEdit; // сопротивление

Label5: TLabel; // результат расчета - ток

Buttonl: TButton; // кнопка Вычислить

var Forml: TForml; implementation

procedure TForml.ButtonlClick(Sender: TObject); var и: real; // напряжение г: real; // сопротивление i: real; // ток begin Labe15.Caption := ' '; try

В приведенной программе исключения могут возникнуть при вычислении величины тока. Если пользователь задаст, что сопротивление равно нулю, то

При ВЫПОЛНеНИИ ИНСТРУКЦИИ i:=u/r ВОЗНИКНеТ ИСКЛЮЧеНИе EZeroDivide.

Размещение сквозной ссылки

Обработка исключительных ситуаций

Как возникают исключительные ситуации?

Существует множество источников исключительных ситуаций. Например, программой могут быть сгенерированны исключения из-за какого-то ненормального состояния. Исключения генерируются компонентами Delphi для различных событий, таких как присвоение свойству значения, выходящего за допустимые пределы, или попытка индексировать несуществующий элемент массива.

Исключительная ситуация возникает при выполнении некорректной математической операции, такой как деление на ноль. Потенциально любой оператор программы может стать причиной исключительной ситуации. Однако некоторые операторы относительно безопасны, и ваша задача при написании устойчивой программы состоит в основном в том, чтобы правильно решить, для каких операторов нужна защита, а какие безопасны.

Вот некоторые типы операций, которые могут привести к исключительным ситуациям:

Ключевые слова, используемые для обработки исключительных ситуаций.

В Object Pascal есть несколько ключевых слов для создания и обработки исключений. Это try, except, on-do-else, finally, raise и at.

Блок защищенных операторов - основное средство для обработки исключительных ситуация. Ниже показана схема создания блока защищенных операторов с помощью блоков try и except. Обратите внимание, что конструкция заканчивается ключевым словом end;

procedure TForm1.Button1Click(Sender: TObject);
Var
I, J, K: integer;
begin
I:=0;
J:=10;
try
K := J div I;
showmessage(inttostr(k));
except
Showmessage ('Ошибка! Деление на ноль.');
end;
end;

  • После возникновения исключительной ситуации в блоке try выполнение немедленно переходит к первому оператору блока except. После генерирования исключительной ситуации дальнейшие операторы блока try не выполняются.
  • После обработки исключительной ситуации в блоке except продолжается нормальное выполнение операторов процедуры или функции, размещенных после защищенного блока.
  • Операторы блока finally выполняются всегда, независимо от того, генерируется ли в блоке try исключение. Обычно операторы блока finally служат для освобождения памяти, закрытия файлов и выполнения других необходимых операций для восстановления стабильности системы при возникновении исключительной ситуации.

Пример использования блока защищенных ресурсов:

procedure TForm1.Button1Click(Sender: TObject);
Var
I, J, K: integer; P : Pointer;
begin
I:=0;
J:=10; getMem(P, 4098); // Выделение памяти
try
K := J div I;
showmessage(inttostr(k));
finally
FreeMem(p, 4098); //Гарантированно выполняется Showmessage ('Память освобождена');
end;
end;
В данном случае память освободится в любом случае. Независимо от исключительных ситуаций (В данном случае - деление на ноль)

В блоке finally не обрабатываются исключительные ситуации - они могут быть обработаны только в блоке except. Операторы блока finally гарантированно выполняются независимо от того, что произошло в предыдущем блоке try.

Вложенные блоки try-except и try-finally

Схема создания смешанных блоков защищенных операторов и защищенных ресурсов:

except end; finally end;
Обработка определенных исключений

Читайте также: