ExtractFilePath UNICODE?

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

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

ExtractFilePath UNICODE?

Сообщение McLion » 16.04.2015 23:53:46

Привет,

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

Код: Выделить всё
ExtractFilePath(Application.ExeName)



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

Re: ExtractFilePath UNICODE?

Сообщение slyubez » 17.04.2015 00:00:54

Почитай здесь, включая нижележащие сообщения:
viewtopic.php?p=85411#p85411
slyubez
постоялец
 
Сообщения: 180
Зарегистрирован: 31.03.2015 08:44:07

Re: ExtractFilePath UNICODE?

Сообщение McLion » 17.04.2015 12:09:41

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

Код: Выделить всё
INI := TIniFile.Create(SysToUTF8(ExtractFilePath(Application.ExeName)) + 'Config.ini');
и
INI := TIniFile.Create(ExtractFilePath(SysToUTF8(Application.ExeName)) + 'Config.ini');
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00

Re: ExtractFilePath UNICODE?

Сообщение ssadragon » 17.04.2015 12:52:08

Так попробуй
INI := TIniFile.Create(ProgramDirectory + 'Config.ini');
ProgramDirectory в модуле FileUtil
ssadragon
постоялец
 
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Re: ExtractFilePath UNICODE?

Сообщение McLion » 17.04.2015 12:53:35

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


ProgramDirectory это что за функция? Она работает и под Линукс и Мак?
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00

Re: ExtractFilePath UNICODE?

Сообщение ssadragon » 17.04.2015 13:03:51

Забыл перекодировку
И надо не 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;     
ssadragon
постоялец
 
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Re: ExtractFilePath UNICODE?

Сообщение McLion » 17.04.2015 13:19:44

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

Код: Выделить всё
function GetCurrentDirUTF8: String;


Директорию правильно отображает, узнает русский буквы, но ini создает в папке с крокосябами. Может Create виноват?
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00

Re: ExtractFilePath UNICODE?

Сообщение ssadragon » 17.04.2015 13:29:49

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

всмысле? Внутри файла крокозябры
ssadragon
постоялец
 
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Re: ExtractFilePath UNICODE?

Сообщение McLion » 17.04.2015 13:37:05

Программа лежит в директории: 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;
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00

Re: ExtractFilePath UNICODE?

Сообщение slyubez » 17.04.2015 14:12:19

{$H+} в сорце есть?
slyubez
постоялец
 
Сообщения: 180
Зарегистрирован: 31.03.2015 08:44:07

Re: ExtractFilePath UNICODE?

Сообщение McLion » 17.04.2015 14:22:11

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


Ага...

Код: Выделить всё
{$mode delphi}{$H+}
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00

Re: ExtractFilePath UNICODE?

Сообщение ssadragon » 17.04.2015 14:32:13

McLion
Прочтите еще раз
viewtopic.php?p=85505#p85505
Последний раз редактировалось ssadragon 17.04.2015 14:33:45, всего редактировалось 1 раз.
ssadragon
постоялец
 
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Re: ExtractFilePath UNICODE?

Сообщение slyubez » 17.04.2015 14:32:37

ИМХО, надо поэкспериментировать. Если каталог создается с таким именем, это означает, что метод создания INI-файла принимает ANSI-строку, и именно в виде ANSI ее нужно передавать, а не в UTF8.
slyubez
постоялец
 
Сообщения: 180
Зарегистрирован: 31.03.2015 08:44:07

Re: ExtractFilePath UNICODE?

Сообщение McLion » 17.04.2015 14:35:11

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


Код: Выделить всё
INI := TIniFile.Create(UTF8ToSys(ProgramDirectory) + 'Config.ini');


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

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


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

Re: ExtractFilePath UNICODE?

Сообщение ssadragon » 17.04.2015 14:40:19

А если поставить {$mode objfpc}{$H+}
И нет ли у вас -dEnableUTF8RTL и/или -FcUTF8 ?
ssadragon
постоялец
 
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Рейтинг@Mail.ru
cron