Пишу консольную прогу в lazarus'е. При попытке компиляции появляется ошибка `Fatal: Can't open include file "fileutil.inc"`.
Версия lazarus: 0.9.28.2 beta. ОС Windows7 32bit
Вот мой исходник:
- Код: Выделить всё
program console0;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, SysUtils, CustApp,
FileUtil
{ you can add units after this };
type
{ TMyApplication }
TMyApplication = class(TCustomApplication)
private
InputFileName : string;
OutputFileName: string;
LogFileName : string;
InputFile : TFileStream;
OutputFile : TFileStream;
LogFile : TStringList;
protected
procedure DoRun; override;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
procedure WriteHelp; virtual;
procedure WriteMessage(str :string);
end;
{ TMyApplication }
procedure TMyApplication.DoRun;
var
ErrorMsg: String;
begin
// quick check parameters
ErrorMsg:=CheckOptions('h','help');
if ErrorMsg<>'' then begin
ShowException(Exception.Create(ErrorMsg));
Terminate;
Exit;
end;
// parse parameters
if HasOption('h','help') then begin
WriteHelp;
Terminate;
Exit;
end;
if HasOption('i','input') then InputFileName :=GetOptionValue('i','input')
else InputFileName :=ExeName;
if HasOption('o','output')then OutputFileName:=GetOptionValue('o', 'output')
else OutputFileName:=InputFileName+'.ksa';
if HasOption('l','log') then LogFileName :=GetOptionValue('l','log')
else LogFileName :='log.txt';
{ add your program here }
try
LogFile:=TStringList.Create;
except
WriteMessage('Ошибка создания объекта "LogFile:=TStringList.Create;"' +
'в "procedure TMyApplication.DoRun"');
end;
try
InputFile:=TFileStream.Create(InputFileName, fmCreate, fmShareExclusive);
except
WriteMessage('Ошибка создания объекта ' +
'"InputFile:=TFileStream.Create(InputFileName, fmCreate, ' +
'fmShareExclusive);" в "procedure TMyApplication.DoRun"');
end;
// stop program loop
Terminate;
end;
constructor TMyApplication.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
StopOnException:=True;
end;
destructor TMyApplication.Destroy;
begin
inherited Destroy;
end;
procedure TMyApplication.WriteHelp;
begin
{ add your help code here }
WriteMessage('Для справки введите:'+ExeName+' -h');
WriteMessage('или введите:'+ExeName+' -help');
end;
procedure TMyApplication.WriteMessage(str :string);
var
buffer : string;
SystemTime: TSystemTime;
begin
GetLocalTime(SystemTime);
buffer:='[' + FormatDateTime('dddd-dd/mm/yyyy-hh:nn:ss:zz',
SystemTimeToDateTime(SystemTime)) + ']: ' + str;
try
LogFile.Add(buffer);
LogFile.SaveToFile(LogFileName);
finally
WriteLn(UTF8ToConsole(buffer));
end;
end;
var
Application: TMyApplication;
{$IFDEF WINDOWS}{$R console0.rc}{$ENDIF}
begin
Application:=TMyApplication.Create(nil);
Application.Title:='My Application';
Application.Run;
Application.Free;
end.
Выделяет 237-ю строку: `{$I fileutil.inc}` в модуле FileUtil.
Файл fileutil.inc есть в наличии и прекрасно открывается редактором кода. И ещё один момент: При нажатии Ctrl в модуле FileUtil подсвечиваются как ссылки все функции и методы кроме тех, что реализованы в ileutil.inc.
Пожалуйста, подскажите как исправить, чтобы код остался кроссплатформенным и не зависимым от текущей кодировки консоли.
Заранее спасибо!