Using Windows API function MoveFile to check if a filename is valid… – via Stack Overflow
Posted by jpluimers on 2018/10/17
This has a really neat Windows API trick [WayBack] delphi – How can I sanitize a string for use as a filename? – Stack Overflow by [WayBack] Alex.
Via: [WayBack] Interesting use of MoveFile, with NIL as the first parameter. https://stackoverflow.com/a/961500/49925 – Thomas Mueller (dummzeuch) – Google+
function IsValidFilePath(const FileName: String): Boolean; var S: String; I: Integer; begin Result := False; S := FileName; repeat I := LastDelimiter('\/', S); MoveFile(nil, PChar(S)); if (GetLastError = ERROR_ALREADY_EXISTS) or ( (GetFileAttributes(PChar(Copy(S, I + 1, MaxInt))) = INVALID_FILE_ATTRIBUTES) and (GetLastError=ERROR_INVALID_NAME) ) then Exit; if I>0 then S := Copy(S,1,I-1); until I = 0; Result := True; end;
–jeroen






Remy said
Using nil as the first parameter of MoveFile() is undocumented behavior.
Mike said
this is not thread save
jpluimers said
so how would one make it more thread safe?