ExtractFilePath UNICODE?

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

ExtractFilePath UNICODE?

Сообщение McLion »

Привет,

использую следующий путь к программе, но сейчас переименовал папку на русский язык и ничего не идет, одни вопросики. Как я понимаю эта функция не понимает Unicode. Как заставить ее это понимать?

Код: Выделить всё

ExtractFilePath(Application.ExeName)



Пасиб!
slyubez
постоялец
Сообщения: 186
Зарегистрирован: 31.03.2015 07:44:07

Сообщение slyubez »

Почитай здесь, включая нижележащие сообщения:
viewtopic.php?p=85411#p85411
Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Сообщение McLion »

Да уже все перепробовал... не идет и все!

Код: Выделить всё

INI := TIniFile.Create(SysToUTF8(ExtractFilePath(Application.ExeName)) + 'Config.ini');
и
INI := TIniFile.Create(ExtractFilePath(SysToUTF8(Application.ExeName)) + 'Config.ini');
ssadragon
постоялец
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Сообщение ssadragon »

Так попробуй
INI := TIniFile.Create(ProgramDirectory + 'Config.ini');
ProgramDirectory в модуле FileUtil
Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Сообщение McLion »

ssadragon писал(а):Так попробуй
INI := TIniFile.Create(ProgramDirectory + 'Config.ini');


ProgramDirectory это что за функция? Она работает и под Линукс и Мак?
ssadragon
постоялец
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Сообщение ssadragon »

Забыл перекодировку
И надо не SysToUTF8 а UTF8ToSys, т.е. так
INI := TIniFile.Create(UTF8ToSys(ProgramDirectory) + 'Config.ini');
McLion писал(а):ProgramDirectory это что за функция? Она работает и под Линукс и Мак?

Ну по идее должна. Просто она делает то же что и вы делали

Код: Выделить всё

{------------------------------------------------------------------------------
  function ProgramDirectory: string;
 ------------------------------------------------------------------------------}
function ProgramDirectory: string;
var
  Flags: TSearchFileInPathFlags;
begin
  Result:=ParamStrUTF8(0);
  if ExtractFilePath(Result)='' then begin
    // program was started via PATH
    {$IFDEF WINDOWS}
    Flags:=[];
    {$ELSE}
    Flags:=[sffDontSearchInBasePath];
    {$ENDIF}
    Result:=SearchFileInPath(Result,'',GetEnvironmentVariableUTF8('PATH'),':',Flags);
  end;
  // resolve links
  Result:=GetPhysicalFilename(Result,pfeOriginal);
  // extract file path and expand to full name
  Result:=ExpandFileNameUTF8(ExtractFilePath(Result));
end;     
Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Сообщение McLion »

Не идет и все .... даже с этим не хочет:

Код: Выделить всё

function GetCurrentDirUTF8: String;


Директорию правильно отображает, узнает русский буквы, но ini создает в папке с крокосябами. Может Create виноват?
ssadragon
постоялец
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Сообщение ssadragon »

McLion писал(а):но ini создает в папке с крокосябами.

всмысле? Внутри файла крокозябры
Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Сообщение McLion »

Программа лежит в директории: D:\привет
Все правильно распознается, но как только прогу закрываю создается директория D:\привеÑ
и в ней лежит Config.ini

Код: Выделить всё

procedure TMainForm.SettingsSave();
var
  INI: TIniFile;
begin
  INI := TIniFile.Create(ProgramDirectory + 'Config.ini');
  try
    try
      // Code
    except
      //...
    end;
  finally
    INI.Free;
  end;
end;
slyubez
постоялец
Сообщения: 186
Зарегистрирован: 31.03.2015 07:44:07

Сообщение slyubez »

{$H+} в сорце есть?
Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Сообщение McLion »

slyubez писал(а):{$H+} в сорце есть?


Ага...

Код: Выделить всё

{$mode delphi}{$H+} 
ssadragon
постоялец
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Сообщение ssadragon »

McLion
Прочтите еще раз
viewtopic.php?p=85505#p85505
Последний раз редактировалось ssadragon 17.04.2015 13:33:45, всего редактировалось 1 раз.
slyubez
постоялец
Сообщения: 186
Зарегистрирован: 31.03.2015 07:44:07

Сообщение slyubez »

ИМХО, надо поэкспериментировать. Если каталог создается с таким именем, это означает, что метод создания INI-файла принимает ANSI-строку, и именно в виде ANSI ее нужно передавать, а не в UTF8.
Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Сообщение McLion »

ssadragon писал(а):McLion
Прочтите еще раз
viewtopic.php?p=85505#p85505


Код: Выделить всё

INI := TIniFile.Create(UTF8ToSys(ProgramDirectory) + 'Config.ini');


Вообще не работает, одни ????? кругом!

Добавлено спустя 1 минуту 5 секунд:
slyubez писал(а):ИМХО, надо поэкспериментировать. Если каталог создается с таким именем, это означает, что метод создания INI-файла принимает ANSI-строку, и именно в виде ANSI ее нужно передавать, а не в UTF8.


SysToANSI или как?
ssadragon
постоялец
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Сообщение ssadragon »

А если поставить {$mode objfpc}{$H+}
И нет ли у вас -dEnableUTF8RTL и/или -FcUTF8 ?
Ответить