Używam Delphi 2010 i mój program chce uzyskać ścieżkę temp systemu. Używam TPath.GetTempPath i wszystko działa dobrze ... przynajmniej dla mnie i moich współpracowników. Ale na niektórych maszynach klienta ta metoda zwraca przyciętą ścieżkę, która (oczywiście) nie istnieje. Odkryłem, że problem wydaje się być wynikiem wywołania funkcji GetLongPathName().Delphi TPath.GetTempPath wynik jest przycięty
Kompletny kod wygląda następująco:
[...]
var
TmpDir : String;
Len : Integer;
begin
[... Call to GetTempPath succeeds and we have a valid temp directory in short "~" notation in var TmpDir ...]
Len := GetLongPathName(PChar(TmpDir), nil, 0); // Len = 37
SetLength(TmpDir, Len - 1); // We want to set the len of TmpDir to 37 - 1.
GetLongPathName(PChar(TmpDir), PChar(TmpDir), Len); // Only 32 (instead of 36) characters are copied - so we have a cropped path - But why?!
end;
[...]
Dzieje się tak tylko w niektórych systemach i nie wiem dlaczego. Znalazłem na to paskudne obejście, ale chciałbym się dowiedzieć, co się tutaj dzieje.
Czy ktoś może rzucić trochę światła na to?
Czy możesz podać przykłady prawidłowych (oczekiwanych) i złych (rzeczywistych) nazw ścieżek? Może to być kodowanie Unicode lub kodowanie? –
Myśleliśmy, że również na pierwszym miejscu, ale nazwy ścieżek nie zawierają żadnych znaków, które mogłyby powodować problemy z konwersjami Unicode. W nazwie ścieżki wyniku GetLongPathName brakuje tylko 4 ostatnich znaków ("emp \" w "Temp \") - wszystkie pozostałe znaki są poprawne. – Patrick
Brzmi jak http://qc.embarcadero.com/wc/qcmain.aspx?d=92006 –