ExtractFilePath함수로 실행파일이있는 폴더의 경로를 알아냈습니다.
그리고 getPath라는 변수에 경로를 대입해서 상대경로로 사용하고있습니다.
그런데 실행파일이 있는 폴더의 한단계 상위폴더에다가 폴더를 만들어서 텍스트파일을 저장하라네요...
실행파일이 있는 폴더의 한단계 상위폴더의 경로를 알려면 어케 해야하나요?
현재는 copy(getPath, 1, length(getPath)-4)이런식으로 끝에 4자리를 짤라서 쓰고있슴다...
마지막 4자리가 bin\이거든요(실행파일이 bin폴더안에있음)...
만약 실행파일이 bin폴더안에 없다면 에러가 발생하겠죠
그래서 정확하게 경로를 알수있는방법이 없을까해서 여러 고수님들한테질문을 올립니다.
아래와 같이 해보세요...
<!--CodeS-->
function PathCanonicalize(pszBuf: PAnsiChar; pszPath: PAnsiChar): BOOL; stdcall;
external 'shlwapi.dll' name 'PathCanonicalizeA';
function GetParentPath(const Path: string): string;
var
Buffer: array[0..MAX_PATH] of Char;
begin
Result := '';
FillChar(Buffer, SizeOf(Buffer), 0);
if PathCanonicalize(Buffer, PChar(Path + '..')) then
Result := IncludeTrailingPathDelimiter(Buffer);
end;
// Usage
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetParentPath(ExtractFilePath(Application.ExeName)));
end;
<!--CodeE-->