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.
typedef struct _SHFILEOPSTRUCT
{
HWND hwnd;
UINT wFunc;
LPCSTR pFrom;
LPCSTR pTo;
FILEOP_FLAGS fFlags;
BOOL fAnyOperationsAborted;
LPVOID hNameMappings;
LPCSTR lpszProgressTitle;
} SHFILEOPSTRUCT, FAR *LPSHFILEOPSTRUCT;
Handle okna, kde se majφ zobrazovat informace o pr∙b∞hu. (M∙₧ete nastavit na 0.)
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.
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.
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.
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.
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.
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∙
Nadpis dialogu s pr∙b∞hem operace. Tento parametr je ignorovßn, pokud nenφ nastavena vlajka FOF_SIMPLEPROGRESS.
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);
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);