Есть код:
- Код: Выделить всё
function GetWorkDir: string;
begin
{$IFDEF WINDOWS}
Result:=GetWindowsSpecialDir (CSIDL_LOCAL_APPDATA);
Result:=Result+'Lyubeznyy'+AppName+'';}
{$ELSE}
Result:=GetAppConfigDir (false);
{$ENDIF}
if not DirectoryExists (Result)
then if not ForceDirectories (Result)
then Raise Exception.Create('Не удается создать рабочий каталог.');
end;
С незначительными изменениями в перекодировках он очень хорошо работал в Laz 1.4 на FPC 2.6.4. Но в связке Laz1.6 с FPC3 у меня никак не получается заставить CreateDir создать каталог. Русские символы в имени юзера есть. Прописал в uses LazFileUtils вместо FileUtil - бесполезно. Прошу помочь.
Добавлено спустя 2 минуты 4 секунды:
Да, при отладке имя пользователя в переменной отображается кракозябрами; остальной путь корректен. Есть желание вернуться на Laz1.2.6 - там проблему, ИМХО, гораздо легче обойтить.
Добавлено спустя 1 час 6 минут 1 секунду:
Сейчас немного поэкспериментировал.
- Код: Выделить всё
s:=GetWindowsSpecialDir (CSIDL_LOCAL_APPDATA);
s1:='';
for I:=1 to Length(s)
do s1:=s1+IntToStr (ord (s [I]))+' ';
s1:=s1+sLineBreak+s;
ShowMessage (s1);
В сообщение выводится вот это:
67 58 92 85 115 101 114 115 92 209 229 240 227 229 233 92 65 112 112 68 97 116 97 92 76 111 99 97 108 92
C:Users??????AppDataLocal
Следовательно, в переменную s возвращена ANSI-строка. Но почему перекодировка строки в UTF8 не спасает - неясно.
Добавлено спустя 10 минут 41 секунду:
С перекодировкой - картина иная, но толку...
- Код: Выделить всё
s:=GetWindowsSpecialDir (CSIDL_LOCAL_APPDATA);
s2:=AnsiToUTF8 (s);
s1:='';
for I:=1 to Length(s2)
do s1:=s1+IntToStr (ord (s2 [I]))+' ';
s1:=s1+sLineBreak+s2;
ShowMessage (s1);
Возврат в сообщении:
67 58 92 85 115 101 114 115 92 239 191 189 239 191 189 239 191 189 239 191 189 239 191 189 239 191 189 92 65 112 112 68 97 116 97 92 76 111 99 97 108 92
C:Users������AppDataLocal
Видно, что, похоже, имя пользователя (Сергей) перекодируется в текст бОльшей длины. Сейчас попробую определить, во что именно.
Добавлено спустя 2 минуты 17 секунд:
Да, и прошу прощения - движок форума местами обрезает виндовые слэши, и они отображаются не везде.
Добавлено спустя 18 минут 33 секунды:
Бред какой-то. Одинаковые комбинации по три байта на каждый символ - ХЗ что. Придется свою функцию писать.