|
|
|
|
Példaprogram letöltése
10187 bájt
|
Egy fájl átnevezése nem bonyolult feladat, még programból sem. Ám mi van akkor, ha egyszerre több fájl is át szeretnénk nevezni, például egy könyvtárban található képeket sorszámmal szeretnénk ellátni. A mellékelt példában egy olyan komponenst készítünk, amely alkalmas egyszerre több fájl átnevezésére úgy, hogy megadhatjuk a fájl nevének és kiterjesztésének új formátumát, illetve ezekbe különböző adatokat illeszthetünk be.
A mellékelt példaprogram megnyitása előtt a FileRenamer.pas-ban lévő komponenst telepítenie kell a Delphi alá.
Mindenekelőtt nézzük meg, hogy a komponenst hogyan tudjuk használni. Mivel a komponens egyszerre több fájl átnevezését teszi lehetővé, ezért ezek nevét az elérési útvonallal együtt a FileList TStringList típusú property-ben kell felsorolni. A fájlnév és kiterjesztés formátumát a PatternName és PatternExtension property-kben tudjuk meghatározni. Ebben használhatunk tetszőleges karaktereket (persze csak olyanokat, amelyek egy fájlévben szerepelhetnek), de elhelyezhetünk benne azonosítókat is, melyek helyére különböző adatok kerülnek beszúrásra. Az azonosítók a következők lehetnek:
- <N> az eredeti fájlnév beillesztése (a fájlnév az elérési útvonal és a kiterjesztés nélkül értendő);
- <E> az eredeti kiterjesztés beillesztése;
- <P#-#> az eredeti fájlnév, vagy kiterjesztés egy részletének beillesztése. Az első # a részlet első karakterének sorszáma, a második pedig az utolsó karakteré (pl. „picture” esetén a <P3-5> a „ctu” sztringet adja meg). A számokat „-” jellel kell elválasztani egymástól, és az azonosító nem tartalmazhat szóközöket.
- <C> a számláló értékének beillesztése. A számláló kezdőértékét a CounterStart property-ben kell megadni. Az érték minden fájlnál a CounterStep property-ben megadott értékkel nő. A CounterWidth property-ben megadhatjuk, hogy a számláló minimum hány karakteren legyen megjelenítve. Ha ennek értéke például 2, akkor a „04” sztring lesz beillesztve, ha a számláló értéke 4.
- <D> a fájl dátumának beillesztése. A dátum megjelenítése a PATT_DATEFORMAT konstansban meghatározott minta szerint történik.
- <T> a fájl utolsó módosításának időpontja. A megjelenítés a PATT_TIMEFORMAT konstansban meghatározott minta szerint történik.
A CharCase property-ben megadhatjuk, hogy az új név milyen betűkkel legyen tárolva. A következő értékek egyikét adhatjuk meg:
- ccNoChange: az eredeti fájlnév illetve kiterjesztésben a betűk nem változnak;
- ccLowercase: minden betű kisbetű;
- ccUppercase: minden betű nagybetű;
- ccFirstCharUpperCase: csak a fájlnév első karaktere lesz nagybetű, a többi kicsi;
- ccCapitalize: a fájlnévben minden szó kezdőbetűje nagybetű, a többi kicsi.
A Replaces TStringList típusú property-ben „név=érték” formában megadhatunk olyan sztringeket, amelyeket egy másikra kell cserélni. Ez úgy történik, hogy miután az új fájlnévbe be lettek illesztve az azonosítók által meghatározott adatok, a property-ben megadott sztringeket („név”) megkeresi, és kicseréli a hozzá tartozó értékre („érték”). Például ha az átnevezés után a fájlnév „alma001.gif”, és a Replaces property tartalmaz egy „alma=körte” sort, akkor a fájlnév a csere után „körte001.gif” lesz.
Az átnevezés eredményét a Results TStringList property-ből tudjuk kiolvasni (csak futási időben).
A komponenst nem csak létező fájlok esetén használhatjuk. Ha a Simulation kapcsolót bekapcsoljuk, akkor a Results property-ben megjelennek az új fájlnevek, de a fájlrendszerben nem történik változás, és hibaüzenetet sem kapunk (OnFileNotExists illetve OnRenameError események).
Miközben az átnevezés tart, különböző eseményekből értesülhetünk róla, hogy éppen mi is történik. Az OnFileNotExists esemény akkor következik be, ha az éppen átnevezendő fájl nem létezik. Az OnRenamed esemény akkor jön létre, amikor a fájl átnevezése sikeresen megtörtént, az OnRenameError pedig értelemszerűen akkor, ha ez nem sikerült. Az OnSyntaxCheck esemény akkor következik be, ha a PatternName és a PatternExtension property-kben megadott minta formailag hibás. Ez utóbbit a SyntaxCheck függvény ellenőrzi.
A SyntaxCheck függvény a public részben van deklarálva, így kívülről is meghívható. Mivel az ellenőrizendő mintát paraméterként megadhatjuk, így a PatternName és PatternExtension property-knek történő értékadás előtt ellenőrizhetjük azt. A függvény második paramétere egy logikai érték, amely igaz érték esetén - ha a mintában hiba van, - egy dialógus ablakban megjeleníti a hiba okát, és azt a karakterpozíciót a mintában, ahol a hibát találta. A függvény visszatérési értéke tartalmazza a hibakódot, és a karakterpozíciót is. Ez egy 4 bájtos érték, aminek felső két bájtja a hibakódot, az alsó kettő pedig a karakterpozíciót tartalmazza. A hibákat a következő konstansokkal tudjuk beazonosítani:
- ERROR_UNTERMINATED_PATTERN_CODE: lezáratlan azonosító kód; ERROR_UNKNOWN_PATTERN_CODE: ismeretlen azonosító kód;
- ERROR_UNEXPECTED_CHAR: nem várt karakter az adott pozícióban.
A hibakód kiszűrése a visszatérési értékből a következő módon történhet:
var
errc: dword;
...
errc:=SyntaxCheck(minta, false);
case errc and $FFFF0000 of ...
...
A hibás karakter pozíciója hasonlóképpen kapható meg:
Ha az ellenőrzés során nem történt hiba, akkor a függvény visszatérési értéke 0 (NO_ERROR).
A régi fájlnévből az új előállítását a megadott minta alapján az ApplyPattern függvény végzi el. Ez szintén egy kívülről meghívható függvény, aminek akkor vehetjük hasznát, ha csak egy fájlnevet akarunk átnevezni. A függvény első paramétere a fájlnév, a második a minta, a harmadik pedig egy logikai érték. Ha ez utóbbi értéke igaz, akkor a FileName paraméterben kiterjesztést adtunk meg, ha hamis, akkor pedig á fájlnevet. Erre azért van szükség, mert a <P> kódnál, amikor a név egy részletét adjuk meg, akkor ez alapján dönti el a függvény, hogy a fájlévből, vagy a kiterjesztésből vegye-e a megadott részletet.
A minta alapján a kódok felcserélése a megfelelő adatra, egy viszonylag egyszerű cserével megoldható (ReplacePatternCode belső eljárás). A név részlet kivétele (a <P> kód esetében) viszont már valamivel bonyolultabb. Ehhez használjuk a GetParts függvényt. Ez a paraméterként megadott sztringből kiolvassa a két megadott értéket. A paraméter sztringnek az első számmal kell kezdődnie, és mindkét számot tartalmaznia kell „#-#>...” formában, ahol a #-ok a számokat helyettesítik. Ha a számok kiolvasása nem sikerült, akkor a SyntaxCheck függvénynek megfelelő hibakóddal tér vissza. Minden egyes szám kiolvasása a GetNumber függvénnyel történik. Ennek első paramétereként meg kell adni a sztringet, ami a számot tartalmazza, második paraméterben egy integer típusú változót, amelybe az eredményt várjuk, harmadik paraméterben pedig a szám végét jelző karaktert.
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 546. oldal
Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!
|