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í, Nota, Díl, Filename, Důležitá poznámka, Public domain, Trik, Exit


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

Kryptoměnový milionář staví v Nevadě obří utopické město využívající blockchain na vše

Kryptoměnový milionář staví v Nevadě obří utopické město využívající blockchain na vše

** V USA vzniká rozsáhlý projekt postavený na blockchainu ** Milionář staví město, které bude fungovat zcela na blockchainu ** Blockchain bude základem pro vše, například i platby, ověřování identity a podobně

Karel Javůrek | 41

Photolemur 3: Prostě do něj přetáhnete fotky a začne se dít magie. Tedy údajně...

Photolemur 3: Prostě do něj přetáhnete fotky a začne se dít magie. Tedy údajně...

** Je lepší nabušený Photoshop, nebo program s jedním tlačítkem? ** Photolemur si myslí to druhé ** Tento fotoeditor neumí skoro nic, a přitom (skoro) všechno

Jakub Čížek | 21

Co pořídit k počítači: tipy na osvědčené klávesnice, sluchátka a další příslušenství

Co pořídit k počítači: tipy na osvědčené klávesnice, sluchátka a další příslušenství

** Toto jsou tipy Živě.cz na příslušenství k počítači, se kterým neuděláte chybu ** Klávesnice, myši, tiskárny, sluchátka... ** Vybíráme jak příslušenství na běžnou práci, tak na hraní her

David Polesný | 26

Google Mapy vs. Mapy.cz: Které internetové mapy jsou lepší?

Google Mapy vs. Mapy.cz: Které internetové mapy jsou lepší?

** Jsou lepší mapy od Googlu, nebo ty od Seznamu? ** Má být mapa především tradiční mapou, nebo spíše asistentem? ** Vyslechněte si argumenty a hlasujte, na jaké straně jste vy

Jakub Čížek, Vladislav Kluska | 78