Weet iemand hoe ik bepaal of de "directory" documents and settings bestaat???
Hoe zit dat met die magische gelinkte mappen?
Weet iemand hoe ik bepaal of de "directory" documents and settings bestaat???
Hoe zit dat met die magische gelinkte mappen?
Waarom wil je dat controleren?
Je moet NOOIT werken met hard-coded directory benamingen als je werkt met Windows-mappen.
Je kunt zoiets doen:
en dat aanroepen met een van de CSIDL uit dit lijstje:Delphi Code:
function GetSpecialFolder(FolderID: LongInt): string; var Path: pchar; idList: PItemIDList; begin GetMem(Path, MAX_PATH); SHGetSpecialFolderLocation(0, FolderID, idList); SHGetPathFromIDList(idList, Path); Result := string(Path); FreeMem(Path); end;
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
Heb je ze toch weten te verwijderen?
1+1=b
Werken aan Ansi support voor Windows is verspilde tijd, behalve voor historici.
Dat is leuk en aardig maar:
En als je vraagt of "C:\Document and Settings" nog bestaat ga ik er vanuit dat dit ook moet draaien op pre-Vista machines{CSIDL}: As of Windows Vista, these values have been replaced by KNOWNFOLDERID values.
Anders kun je nét zo goed antwoorden dat de "Document and Settings" niet bestaat maar een link is.
Ik vraag de mappen op (TDirectory.GetDirectories) en krijg daar "documents and settings" bij.
Wanneer ik dan de attributen opvraag van die map: crash met map bestaat niet.
Jammer dat een map niet gewoon een map is...
Dank voor de antwoorden!
Je kunt vrij makkelijk controleren of de directory een symlink is.
Controleer voor faSymLink in filegetattr.
Zie http://www.delphibasics.co.uk/RTL.asp?Name=filegetattr
Ik weet niet welke functie jij gebruikt om de attributen te controleren maar filegetattr zou dus niet mogen crashen, maar je kunt hem dus wel makkelijk overslaan.
Een junction controleren (ook een soort symlink maar dan "anders") is geloof ik wat moeilijker.
http://stackoverflow.com/questions/1...tion-in-delphi
filgetatt klapt op mijn c:\documents and settings (directorynotfound)
Ik zie inderdaad dat FileGetAttr klapt op een symlink.
Maar waarom gebruik je niet gewoon de Attr van TSearchRec??
Deze routine:
geeft onder andere dit als resultaat:Delphi Code:
procedure TForm1.Button1Click(Sender: TObject); var Rec: TSearchRec; begin if FindFirst('C:\*', faAnyFile, Rec) = 0 then begin repeat if Rec.Attr and faDirectory > 0 then begin Memo1.Lines.Add(Rec.Name + ' ' + Rec.Attr.ToString); if Rec.Attr and faSymLink > 0 then Memo1.Lines.Add(Rec.Name + ' is a symbolic link') else Memo1.Lines.Add(Rec.Name + ' is not a symbolic link'); end; until FindNext(Rec) <> 0; FindClose(Rec); end; end;
Dus de Rec.Attr controleren op faSymLink werkt prima om een symlink te detecteren.Code:Documents and Settings 9238 Documents and Settings is a symbolic link Drivers 16 Drivers is not a symbolic link
(Je kunt deze FindFirst natuurlijk ook in een functie gebruiken om de Attr van één directory terug te geven)
ook filegetattr zegt dat de directory C:\documents and settings niet bestaat.
Ik ga het inderdaad eens met FindFirst() proberen, want dit gaat niet...
Code:Dirs := TDirectory.GetDirectories('C:\', '*.*', TSearchOption.soTopDirectoryOnly); for S in Dirs do begin att := TDirectory.GetAttributes(S, True); // auw end;
Oke. De nieuwe manier van bestanden ophalen in Delphi.
Een bug in de functie?
Delphi is great. Lazarus is more powerfull
Ik heb het probleem gevonden.
TDirectory.GetAttributes() is niet gemaakt voor symbolic link directories.
Als eerste aanroep in TDirectory.GetAttributes() wordt CheckGetAttributesParameters(Path); gebruikt om te controleren of Path aan een aantal eisen voldoet.
Daarvan is controle op het bestaan er één van.
Delphi Code:
if ExistsCheck and (not Exists(Path)) then raise EDirectoryNotFoundException.CreateRes(@SPathNotFound);
Dit is de oplossing om de controle op path te omzeilen:
Delphi Code:
Dirs := TDirectory.GetDirectories('C:\', '*.*', TSearchOption.soTopDirectoryOnly); for S in Dirs do begin att := TFile.IntegerToFileAttributes(FileGetAttr(S, false)); end;
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks