Witam. Zacząłem próbować operacji na plikach w pascalu, chciałem sobie stworzyć jakikolwiek plik tekstowy na pulpicie, natrafiłem jednak na taki problem:
Gdy sprawdzam lokalizację jakiegoś pliku na pulpicie (żeby sprawdzić gdzie znajduje się katalog) pokazuje mi c:\users\ja\deskop
jednak gdy wchodzę w folder ja
, rzeczywiście, jest tam folder deskop, tylko że pusty, a wszystkie pliki z pulpitu znajdują się w folderze pulpit
. I teraz tak, gdy próbuję w pascalu stworzyć ten plik w ścieżce c:\users\ja\deskop, to pojawia się on oczywiście w folderze deskop, który był pusty, natomiast na pulpicie nic się nie dzieje. Gdy zaś próbuję stworzyć go w ścieżce c:\users\ja\pulpit, to jest błąd, że taka lokalizacja nie istnieje. Mógłby mi ktoś wytłumaczyć co jest nie tak, czy coś robię źle?
Nie wiem jakiego Pascala używasz ale we FreePacalu raczej powinno zadziałać Jak odczytać ścieżki folderów specjalnych
Spróbuj użyć tego jako ścieżki: %UserProfile%\Desktop\
Możesz sobie przetestować w konsoli Windowsa wklepując w cmd
np to: cd %UserProfile%\Desktop\
Nie wiem czy w Pascalu zadziała ale możesz spróbować.
propozycja Grześka niestety nie działa, a co do linka który podał mi kAzek, to czy mógłby mi ktoś wytłumaczyć o co w tym chodzi? bo pascal u mnie nie rozpoznaje ani Max_path
ani SHGetSpecialFolderPath
Zacznijmy od tego jakiego Pacala używasz to FreePascal czy może zabytkowy Borland/Turbo Pascal czy coś jeszcze innego?
Free pascal
AppendPathDelim(SysUtils.GetEnvironmentVariable('userprofile'))+'Desktop'
domyśliłem się że mam dołączyć unit sysutils
, ale i tak mam: identifier not found 'AppendPathDelim'
Sklejanie ścieżek w ten sposób to zły pomysł. Fizyczną lokalizację tego typu folderów można zmienić (ja pulpit mam w domyślnej lokalizacji, ale niektóre pozmieniałem). Użyj metody z linku kazka.
Przykład dostosowany do FreePascala:
program test;
uses Windows, ShlObj;
function GetSpecialFolderPath(const Folder: Integer): string;
var
Path: shortstring;
begin
SHGetSpecialFolderPath(0, @Path, Folder , False);
GetSpecialFolderPath:= StrPas(@Path);
end;
var
DesktopPath: string;
begin
DesktopPath:= GetSpecialFolderPath(CSIDL_DESKTOP);
writeln(DesktopPath);
readln;
end.
problem taki jak już pisałem wyżej: nie rozpoznaje "SHGetSpecialFolderPath"
Już znalazłem problem, korzystałem dalej ze starszej wersji pascala, nie wiedziałem że jeszcze wgl ją mam. Na nowszej działa dobrze. dziękuję wszystkim