Fatal: Can't open include file "fileutil.inc

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

R1DDLE
новенький
Сообщения: 26
Зарегистрирован: 08.12.2009 18:00:24

Fatal: Can't open include file "fileutil.inc

Сообщение R1DDLE »

Всем привет!

Пишу консольную прогу в 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.

Пожалуйста, подскажите как исправить, чтобы код остался кроссплатформенным и не зависимым от текущей кодировки консоли.

Заранее спасибо!
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

подключите пакет LCL.
R1DDLE
новенький
Сообщения: 26
Зарегистрирован: 08.12.2009 18:00:24

Сообщение R1DDLE »

Каким образом?
После добавления в uses LCL ничего не изменилось. Стопорится на той же строке, типа не может открыть файл fileutil.inc.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Нет Лазаруса под рукой. В зависимостях проекта добавить пакет LCL. Посмотри в меню Проект, кажется там такое было.
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

В меню "Проект" выбрать пункт "Инспектор проекта". И там уже добавить пакет LCL
R1DDLE
новенький
Сообщения: 26
Зарегистрирован: 08.12.2009 18:00:24

Сообщение R1DDLE »

Padre_Mortius писал(а):В меню "Проект" выбрать пункт "Инспектор проекта". И там уже добавить пакет LCL

Сделал. Та же ошибка в той же строке. :cry:
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

fpc 2.4.0 + lazarus svn + ваш пример. Все компилируется
У вас нет необходимых прав для просмотра вложений в этом сообщении.
R1DDLE
новенький
Сообщения: 26
Зарегистрирован: 08.12.2009 18:00:24

Сообщение R1DDLE »

Версия lazarus:0.9.28.3 бета
Версия fpc: 2.4.0
Результат тот же.
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

В инспекторе проектов у вас также как и на скриншоте?
R1DDLE
новенький
Сообщения: 26
Зарегистрирован: 08.12.2009 18:00:24

Сообщение R1DDLE »

Да, только у проекта имя другое.
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

попробуйте скомпилить проект из вложения

Добавлено спустя 6 минут 40 секунд:
кстати, а файл fileutil.inc у вас есть в папке lazarus\lcl\include
У вас нет необходимых прав для просмотра вложений в этом сообщении.
R1DDLE
новенький
Сообщения: 26
Зарегистрирован: 08.12.2009 18:00:24

Сообщение R1DDLE »

Попробовал: console0.lpr(8,13) Fatal: Can't find unit FileUtil used by console0. выделяет строку №8 исходника: `{$ENDIF}{$ENDIF} `. Не видит FileUtil.

Позже добавил через инспектор проекта FileUtil в проект. Вернулась старая ошибка.

Ещё позже добавил fileutil.inc в проект тем же способом. Никаких изменений. Хотя fileutil.inc в редакторе открывается без проблем. :(

P.S. Неужели это всё из-за ОСи :?:
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

Это полностью ваш проект только исправленный. Он нормально компилится и под Linux и под Windows XP, но не работает.

попробуйте пересобрать Лазарус. На форуме вроде как есть (были) люди, кто использует Windows 7. Так что не факт, что дело в системе
R1DDLE
новенький
Сообщения: 26
Зарегистрирован: 08.12.2009 18:00:24

Сообщение R1DDLE »

Проблему решил. Нужно было прописать пути ко всем инклудам в проекте.
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

Бред какой-то. Можно посмотреть на ваш fpc.cfg?
Ответить