본문으로 바로가기
  1. Home
  2. 컴퓨터/프로그래밍
  3. 라자루스 사용자 AppData 폴더 위치 구하기

라자루스 사용자 AppData 폴더 위치 구하기

· 댓글 0 · 바다야크

프로그램을 윈도우 프로그램 폴더에 저장했다면, 권한 문제 대문에 그 위치에 파일을 생성하지 못합니다. 이런 경우 AppData 폴더를 이용합니다. AppData 폴더 위치는 ShGetSpecialFolderPath() 함수에 CSIDL_LOCAL_APPDATA를 인수로 호출하여 구할 수 있습니다. ShGetSpecialFolderPath() 함수를 사용하려면 uses절에 shlobj를 추가해야 합니다.

How to get the appdata folder location in Lazarus

라자루스 AppData
라자루스 AppData

라자루스에서 AppData 폴더 위치를 구하는 예제입니다. Button1을 클릭하면 labAppData에 AppData 폴더 위치를 표시합니다.

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    labAppData: TLabel;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

uses
  shlobj;

 { TForm1 }

function GetAppDataFolderDir: string;
var
   r: Boolean;
   path: array[0..Max_Path] of Char;
begin
   r := ShGetSpecialFolderPath(0, path, CSIDL_LOCAL_APPDATA, False);
   if not r
   then
      raise Exception.Create('Could not find AppData location.') ;
   Result := Path;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  labAppData.Caption := GetAppDataFolderDir;
end;

end.

uses절에 shlobj를 추가하고 ShGetSpecialFolderPath()에 인수 값 CSIDL_LOCAL_APPDATA로 구했습니다.

예제를 실행한 후 Button1을 클릭하면 AppData 폴더의 위치가 표시됩니다.

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    labAppData: TLabel;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

uses
  shlobj, lazutf8;

 { TForm1 }

function LocalAnsiToUtf8( strAnsi: string): string;
begin
   SetCodePage( RawByteString( strAnsi), 949, FALSE);
   result  := AnsiToUtf8( strAnsi);
end;

function GetAppDataFolderDir: string;
var
   r: Boolean;
   path: array[0..Max_Path] of Char;
begin
   r := ShGetSpecialFolderPath(0, path, CSIDL_LOCAL_APPDATA, False);
   if not r
   then
      raise Exception.Create('Could not find AppData location.') ;
   Result := LocalAnsiToUtf8( Path);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  labAppData.Caption := GetAppDataFolderDir;
end;

end.

만일 AppData 폴더 위치에 한글이 있어서 깨진다면 위 예제 코드에서 LocalAnsiToUtf8() 함수를 참고하여 UTF8로 변환합니다. UTF8 관련 함수를 사용하기 위해서는 uses절에 lazutf8 유닛을 추가합니다.

💬 댓글 0

이름을 저장합니다.

최근글 thumbnail C언어 텍스트 파일 읽기 예제 thumbnail 모기 물린데 가려움증 없애는 기구 3가지 thumbnail 바퀴벌레 약 추천 맥스포스겔 셀렉트 이지겔 (2) thumbnail C언어 텍스트 파일 쓰기 방법 thumbnail 카카오톡 책갈피로 중요한 톡 북마크 표시 thumbnail 윈도우 노트북 SD 메모리 카드 암호화 방법 thumbnail 삼성덱스 휴대폰 충전 방법 (1) thumbnail 돈 버는 어플 3종 현금되는 영수증 인증과 돈버는 만보기앱
다행이네요. 약 효과가 아무⋯ 💬바다야크 이사 오기전 전에 저도 썼었⋯ 💬라디오키즈 구글 크롬 원격 데스크톱을⋯ 💬바다야크 구글크롬 원격데스크탑 사용⋯ 💬ㅠㅠ 아! 그렇습니까. 맥을 사용하⋯ 💬바다야크