Tôi đang sử dụng Delphi 2010 và chương trình của tôi muốn có đường dẫn tạm thời của hệ thống. Tôi đang sử dụng TPath.GetTempPath và mọi thứ đang hoạt động tốt ... ít nhất là đối với tôi và đồng nghiệp của tôi. Nhưng trên một số máy khách, phương thức này trả về một đường dẫn bị cắt (dĩ nhiên) không tồn tại. Tôi phát hiện ra rằng vấn đề có vẻ là kết quả từ cuộc gọi cơ bản đến GetLongPathName().Kết quả Delphi TPath.GetTempPath bị cắt
Các mã hoàn chỉnh trông như thế này:
[...]
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;
[...]
này chỉ xảy ra trên một số hệ thống và tôi không biết tại sao. Tôi tìm thấy một cách giải quyết khó chịu cho điều này, nhưng tôi muốn biết những gì đang xảy ra ở đây.
Ai đó có thể đặt ánh sáng lên điều này không?
Bạn có thể cung cấp cho chúng tôi các ví dụ về tên đường dẫn (đúng) và xấu (thực tế) chính xác không? Nó có thể là một vấn đề mã hóa Unicode hay không? –
Chúng tôi cũng nghĩ rằng ở vị trí đầu tiên, nhưng tên đường dẫn không chứa bất kỳ ký tự nào có thể gây ra sự cố với chuyển đổi Unicode. Tên đường dẫn kết quả của GetLongPathName chỉ thiếu 4 ký tự cuối cùng ("emp \" của "Temp \") - tất cả các ký tự khác đều hợp lệ. – Patrick
Âm thanh như http://qc.embarcadero.com/wc/qcmain.aspx?d=92006 –