Zo af en toe ruim ik mijn harde schijf eens op. Verplaats wat bestanden in mappen met een wat meer toepasselijke naam, wis wat rommel, defragmenteer hier en daar wat. Je kent het wel. Wat gebeurt er echter wel eens, ben je net lekker bezig, kan je sommige bestanden niet verwijderen omdat ze gelocked zijn door een bepaald proces of erger nog, de bestandsnaam is van dien aard dat je het bestand niet kan verwijderen. Deze laatste noem ik voor het gemak maar ’stupid files’.
Wat blijkt nu, in Windows verkenner kan je bestanden niet verwijderen omdat ze karakters bevatten die niet mogen of de naam is simpelweg te lang. De manier om deze bestanden alsnog te verwijderen is gebruik te maken van de oude 8.3 notatie (je kent het wel NHJ_87~1.TXT bijvoorbeeld). Om een 8.3 notatie te zien, kan je het commando dir /x gebruiken. Vervolgens gebruik je het command del <file> om het bestand te verwijderen.
Wel jammer dat er vaak zoveel bestanden staan dat het een tijdrovende taak wordt om dit bestand voor bestand uit te voeren. Tja, dan maar een klein proggie schrijven die dit voor je doet.
Een kleine console application met daarin alle bestanden op te sommen moet al voldoende zijn, ware het niet dat .Net niet het 8.3 filename formaat ondersteunt. Hiervoor moet je een dllImport uitvoeren op de kernel32.dll.
[DllImport("kernel32.dll")]
static extern int GetShortPathName(string longPath, StringBuilder buffer, int bufferSize);
...
StringBuilder buffer = new StringBuilder(256);
GetShortPathName(file, buffer, buffer.Capacity);
string shortfilename = buffer.ToString();
Om direct aan de slag te gaan met het deleten van die stupid files, kan je . De (eenvoudige) sourcecode van dit tooltje heb ik hier voor je beschikbaar.
Mocht je nou toch nog locked files tegenkomen, dan is misschien wat voor je. geeft je een extra optie in je rechtermuis-menu om een bestand te ‘unlocken’. Wel handig.
Tool DeleteStupidFiles - link
Source DeleteStupidFiles - link
Unlocker - link