..::int SHFileOperation(LPSHFILEOPSTRUCT lpFileOp );::..

Funkce slou₧φ ke kopφrovßnφ, p°esunutφ, p°ejmenovßnφ a mazßnφ soubor∙ a adresß°∙. Pro to existujφ samoz°ejm∞ i dalÜφ API funkce, ale tato narozdφl od nich zobrazuje i dialog s pr∙b∞hem danΘ akce. (Ten sam² co znßte z pr∙zkumnφka.)

Jejφm jedin²m parametrem je ukazatel na strukturu SHFILEOPSTRUCT, kterß urΦuje co funkce d∞lß. Nßsleduje popis jejφch slo₧ek. Nßs budou zajφmat hlavn∞ Φty°i z nich jak uvidφte v p°φkladech na konci Φlßnku.

Prvky struktury SHFILEOPSTRUCT

typedef struct _SHFILEOPSTRUCT

{

HWND hwnd;

UINT wFunc;

LPCSTR pFrom;

LPCSTR pTo;

FILEOP_FLAGS fFlags;

BOOL fAnyOperationsAborted;

LPVOID hNameMappings;

LPCSTR lpszProgressTitle;

} SHFILEOPSTRUCT, FAR *LPSHFILEOPSTRUCT;

hwnd

Handle okna, kde se majφ zobrazovat informace o pr∙b∞hu. (M∙₧ete nastavit na 0.)

wFunc

Hodnota tohoto parametru urΦuje, jakß operace se mß provßd∞t. Lze pou₧φt nßsledujφcφ Φty°i konstanty: FO_COPY, FO_DELETE, FO_MOVE, FO_RENAME. ╪ekl bych, ₧e nßzvy konstant mluvφ samy za sebe.

pFrom

Ukazatel na buffer obsahujφcφ nßzvy soubor∙, se kter²mi se mß manipulovat. Ka₧d² nßzev souboru je ukonΦen znakem \0. Cel² seznam je pak ukonΦen dv∞ma znaky \0. Seznam soubor∙ lze takΘ specifikovat pomocφ klasickΘ hv∞zdiΦkovΘ konvence.

pTo

Ve v∞tÜin∞ p°φpad∙ je hodnotou tohoto parametru adresß°, kam soubory zkopφrovat/p°emφstit. V p°φpad∞ mazßnφ je tento parametr ignorovßn. Zajφmavou mo₧nostφ je pou₧φt vlajku FOF_MULTIDESTFILES (viz nφ₧e) - pak je hodnotou parametru seznam soubor∙ zapsan² ve stejnΘm formßtu jako u pFrom a funkce zkopφruje/p°ejmenuje soubory z pFrom na soubory na odpovφdajφcφch mφstech seznamu pTo.

fFlags

Vlajky up°es≥ujφcφ provedenφ operace. Hodnotou je souΦet libovoln²ch z nßsledujφcφch konstant:

FOF_ALLOWUNDO V helpu je napsßno, ₧e pou₧itφ tΘto vlajky zachovßvß informaci pro undo. Praktick² v²znam je, ₧e pou₧itφ tΘto vlajky p°i mazßnφ ma₧e soubory do koÜe, nikoliv p°φmo z harddisku.
FOF_FILESONLY Pokud je v pFrom pou₧ita hv∞zdiΦkovß konvence, nezahrnou se do v²b∞ru adresß°e.
FOF_MULTIDESTFILES Signalizuje, ₧e v pTo je pou₧it seznam soubor∙ mφsto adresß°e.
FOF_NOCONFIRMATION Nezobrazuje ₧ßdnΘ potvrzovacφ dialogy (p°i kolizφch jmen soubor∙ apod.), automaticky p°edpoklßdß odpov∞∩ "Ano".
FOF_NOCONFIRMMKDIR Nevy₧aduje potvrzenφ vytvo°enφ novΘho adresß°e.
FOF_NOERRORUI Pokud nastane n∞jakß chyba, nezobrazφ se dialog, kter² o tom inforuje u₧ivatele.
FOF_RENAMEONCOLLISION Pokud p°i kopφrovßnφ/p°esunu dojde ke kolizi jmen (tj. cφlov² soubor u₧ bude existovat), jmΘno cφlovΘho souboru se upravφ (nap°. v Φesk²ch Windiws se p°idß p°edpona "Kopie - ").
FOF_SILENT Nanφ zobrazovßn dialog s pr∙b∞hem operace (defaultn∞ zobrazovßn v₧dy je!)
FOF_SIMPLEPROGRESS Je zobrazena jen zjednoduÜenß verze dialogu s pr∙b∞hem operace (nejsou zobrazena jmΘna jednotliv²ch soubor∙).

Poznßmka 1: Nepopisoval jsem vlajky FOF_CONFIRMMOUSE, FOF_NOCOPYSECURITYATTRIBS a FOF_WANTMAPPINGHANDLE, proto₧e je velmi pravd∞podobn∞ nevyu₧ijete. Jejich popis zßjemci najdou v nßpov∞d∞.

Poznßmka 2: Typ FILEOP_FLAGS (tedy typ prom∞nnΘ fFlags) je definovßn jako Word.

fAnyOperationsAborted

Tato polo₧ka je v²stupnφ - po volßnφ funkce je zde hodnota TRUE, pokud u₧ivatel n∞kterou z operacφ p°eruÜφ kliknutφm na tlaΦφtko Storno. Pokud ne, je zde vrßcena hodnota False.

hNameMappings

Pravd∞podobn∞ nebudete pot°ebovat. Funkce zde (pokud pou₧ijete vlajku FOF_WANTMAPPINGHANDLE) vracφ ve specißlnφm formßtu seznam star²ch a nov²ch jmen vÜech soubor∙

lpszProgressTitle

Nadpis dialogu s pr∙b∞hem operace. Tento parametr je ignorovßn, pokud nenφ nastavena vlajka FOF_SIMPLEPROGRESS.

P°φklady:


Kopφrovßnφ soubor∙:


SHFILEOPSTRUCT s;

ZeroMemory(&s,sizeof(s));    // Vyprßzdn∞nφ obsahu struktury

s.wFunc = FO_COPY;          // Kopφrovßnφ

s.pFrom = "c:\\test\\*.*";        // Odkud - Obsah adresß°e c.\test (vΦetn∞ podadresß°∙ proto₧e nenφ specifikovßn flag FOF_FILESONLY)

s.pTo = "c:\\test1";                // Kam - Do adresß°e c:\test1

s.fFlags = FOF_ALLOWUNDO;

SHFileOperation(&s);


Mazßnφ soubor∙:


SHFILEOPSTRUCT s;

ZeroMemory(&s,sizeof(s));    // Vyprßzdn∞nφ obsahu struktury

s.wFunc = FO_DELETE;          // Mazßnφ

s.pFrom = "c:\\test\\*.*";        // Co - Obsah adresß°e c.\test (vΦetn∞ podadresß°∙ proto₧e nenφ specifikovßn flag FOF_FILESONLY)

s.fFlags = FOF_ALLOWUNDO;    // Zp∙sobφ vymazßnφ soubor∙ do koÜe, jinak se sma₧ou ·pln∞

SHFileOperation(&s);