C# - Mappa tartalmának törlése az Intéző gyorsmenüjéből

forráskód letöltése
Az Intéző hasznos segédprogram a Windows rendszerekben, hiszen számtalan funkcióval segíti a fájlrendszer elemeinek menedzselését. Az egyik legfontosabb tulajdonsága mégis bővíthetősége, vagyis hogy az esetleg hiányzó funkciók – korlátozott mértékben – a részévé tehetők. Ilyen például, hogy új menüpontok és funkciók vehetők fel az egyes elemek gyorsmenüjébe. A gyorsmenük mindegyikében megtalálható a törlés funkció, azonban mappák esetén nem lehet elérni azt, hogy csak a mappa elemei törlődjenek, de a mappa ne semmisüljön meg. Cikkünkben ennek megvalósítására keresünk választ.
A mellékelt példa kipróbálása előtt két lépést meg kell tennünk: az első, hogy az AddDelContents.reg állomány 7. sorában módosítani kell a DeleteContents.exe alkalmazás elérési útvonalát a megfelelőre. A második lépésben futtassuk is le az AddDelContents.reg állományt.
A megvalósítandó cél tehát az, hogy a mappák gyorsmenüjében jelenjen meg egy Tartalom törlése pont, melynek segítségével a mappa tartalma törlődik úgy, hogy a mappa, valamint a gyermekmappák nem törlődnek.
A megoldás érdekében létrehoztunk egy konzolalkalmazást, mely az aktuális mappa elérési útvonalát kapja parancssori argumentumként, majd rekurzív módon a fenti szempontok szerint törli a mappák tartalmát.
A Main metódusban lekérdezzük a parancssori argumentumot, majd meghívjuk a DeleteFiles metódust.
static void Main(string[] args)
{
  if (args.Length == 1)
  {
    DirectoryInfo di = new DirectoryInfo(args[0]);
    DeleteFiles(di.FullName);
    ...
A DeleteFiles metódusban először lekérdezzük a mappa fájljainak és almappáinak nevét, majd ezeket egy-egy tömbben helyezzük el.
DirectoryInfo curdir = new  DirectoryInfo(directory);
DirectoryInfo[] directories;
FileInfo[] files;
directories = curdir.GetDirectories();
files = curdir.GetFiles();
Ezt követően egy ciklusban minden mappára meghívjuk a DeleteFiles metódust.
foreach (DirectoryInfo di in directories)
{
  eleteFiles(di.FullName);
}
Egy másik ciklusban a fájlokat rendre kitöröljük.
foreach (FileInfo fi in files)
{
  fi.Delete();
}
Annak érdekében, hogy a műveletet az Intéző gyorsmenüjéből végezhessük el, a Rendszerleíró adatbázis HKEY_CLASSES_ROOT\Directory\Shell kulcsa alatt kell létrehoznunk egy Install kulcsot, és megadnunk a feliratot. A mellékelt AddDelContents.reg állományban a következő sorral érhetjük el ezt.
[HKEY_CLASSES_ROOT\Directory\Shell\Install]
@="Tartalom törlése"
Ahhoz, hogy a műveletet elvégezhessük, egy parancssort kell elindítanunk, majd a parancsot argumentumként átadni neki. Azt is meg kell oldanunk, hogy a parancssor, miután elvégezte a műveletet, záródjon is be. Ekkor kell alkalmaznunk a /c kapcsolót.
A .reg állományban a következő sorokkal valósítható meg, hogy a menüpont megnyomása után végrehajtódjon a művelet.
[HKEY_CLASSES_ROOT\Directory\Shell\Install\Command]
@="<elérési út>:\\DeleteContents.exe \"%1\""
A mellékelt RemoveDelContents.reg állomány segítségével megszüntethetjük a létrehozott bejegyzéseket, és a menüpont ezek után nem érhető el.
[-HKEY_CLASSES_ROOT\Directory\Shell\Install]
[-HKEY_CLASSES_ROOT\Directory\Shell\Install\Command]