Tipy a triky v Delphi, díl 77.

V našem dnešním malém tipu si ukážeme funkci, která zjistí vlastníka (tvůrce) libovolného souboru, který na disku máme.
Všichni jsme zvyklí na to, že každý soubor, který je na disku uložen, má jisté vlastnosti - atributy. Kromě samotného názvu souboru tak můžeme zjistit rozličné časové informace (kdy byl vytvořen, změněn atd..), zda je chráněn proti zápisu a podobně. Jednou z těchto informací je též vlastník souboru, tedy osoba, která soubor na disku vytvořila. A jeho jméno (loginname) se právě naučíme zjišťovat.

Náš příklad uděláme velmi jednoduše. Na formulář umístěte OpenDialog, pomocí kterého vybereme příslušný soubor, jehož vlastníka chceme znát. Dialog vyvoláme stiskem tlačítka, takže jej rovněž přidejte na formulář. A to je vlastně vše. Zavoláme příslušnou funkci, jejímž vstupním parametrem je jméno souboru a na výstupu se nám vrátí jméno uživatele a doména. Výsledek se pak zobrazí v jednoduchém ShowMessage dialogu.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    OpenDialog1: TOpenDialog;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetFileOwner(const FileName: string; var Domain, Username: string): Boolean;
var
  SecDescr: PSecurityDescriptor;
  SizeNeeded, SizeNeeded2: DWORD;
  OwnerSID: PSID;
  OwnerDefault: BOOL;
  OwnerName, DomainName: PChar;
  OwnerType: SID_NAME_USE;
begin
  GetFileOwner := False;
  GetMem(SecDescr, 1024);
  GetMem(OwnerSID, SizeOf(PSID));
  GetMem(OwnerName, 1024);
  GetMem(DomainName, 1024);
  try
    if not GetFileSecurity(PChar(FileName), OWNER_SECURITY_INFORMATION, SecDescr, 1024, SizeNeeded) then Exit;
    if not GetSecurityDescriptorOwner(SecDescr, OwnerSID, OwnerDefault) then Exit;
    SizeNeeded := 1024;
    SizeNeeded2 := 1024;
    if not LookupAccountSID(nil, OwnerSID, OwnerName, SizeNeeded, DomainName, SizeNeeded2, OwnerType) then Exit;
    Domain := DomainName;
    Username := OwnerName;
  finally
    FreeMem(SecDescr);
    FreeMem(OwnerName);
    FreeMem(DomainName);
  end;
  GetFileOwner := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Domain, Username: string;
begin
  OpenDialog1.Execute;
  if OpenDialog1.FileName <> `` then
      if GetFileOwner(`soubor.txt`, Domain, Username) then ShowMessage(Username + `@` + Domain)
      else ShowMessage(`Vlastníka nelze zjistit!`);
end;

end.

Parametrem funkce může být pochopitelně libovolný soubor, takže textovým souborem použitým v našem příkladu se nedejte zmást. V případě neúspěchu funkce vrací false.

Na závěr jedna důležitá poznámka, která možná patří spíše na začátek dnešního příkladu. Tento tip bude fungovat samozřejmě pouze na systémech generace NT, neboť starší řada 9x (souborový systém) tyto informace neukládá.

Diskuze (4) Další článek: DirectX verze 9.1 již v březnu

Témata článku: Software, Windows, Programování, Public domain, Důležitá poznámka, Trik, Filename, Díl, Exit, Nota


Určitě si přečtěte

Modelářský zázrak: Maketa raketoplánu Columbia, která létá jako skutečná raketa

Modelářský zázrak: Maketa raketoplánu Columbia, která létá jako skutečná raketa

** Model raketoplánu Columbia od českého konstruktéra umí i létat ** Obdivuhodný model si vzal 1600 hodin práce ** Podívejte se na fotografie ze stavby a prvního letu

Karel Jeřábek | 20

Vyzkoušeli jsme eObčanku a přihlásili se s ní na weby úřadů. Vážně to funguje!

Vyzkoušeli jsme eObčanku a přihlásili se s ní na weby úřadů. Vážně to funguje!

** Máme eObčanku, máme čtečku, vyzkoušeli jsme přihlášení na weby úřadů. ** Objevily se drobné problémy, podařilo se nám je vyřešit. ** Používání eObčanky pro online identifikaci je velmi pohodlné.

Marek Lutonský | 35

Jak horko bude ve vašem městě, až vám bude 80 let? Podívejte se, jak se projeví klimatické změny!

Jak horko bude ve vašem městě, až vám bude 80 let? Podívejte se, jak se projeví klimatické změny!

** Srpen byl třetí nejteplejší za posledních více než sto let ** Bude to ale daleko horší, jak ukazuje aplikace NYT ** V Praze vzroste počet horkých dní na čtyřnásobek

Karel Kilián | 21


Aktuální číslo časopisu Computer

Jak vytvořit a spravovat vlastní web

Velký test herních klávesnic a DVB-T2 tunerů

Vše o formátu RAW

Vybíráme nejlepší základní desku