Impossibile leggere dal file sorgente o disco

Questo fastidioso errore di Windows, “Cannot read from the source file or disk”, mi è purtroppo capitato in più di una occasione, specialmente in ambienti server dove per tua natura non puoi controllare chi scrive cosa e quando, a meno che non gli stai con il fiato sul collo a tutti.

Delete file error on windows platform

Infatti, particolari tipi di file, una volta scritti, risultano anche privi di una scheda proprietà e relativi permessi. Un riscontro veloce con il CHKDSK per vedere se c’è qualcosa di anomalo, non mostra nulla di strano. Insomma tutto lasci pensare a dei problemi di natura più grave, ma alla fine la soluzione è più semplice di quanto non sembri: il problema è solo uno, conoscere questa soluzione.

A nulla è valso l’uso di tool di ripulitura come Unlocker che in una passata occasione, su un altro computer si era, invece, dimostrato vincente.

Ma prima di vederla, sicuramente è anche interessante capire perchè o soprattutto come questi file possono essere creati. Già perchè oggetto di questo problemi sono file che vengono sostanzialmente creati con una sintassi che il kernel di windows ignora o non riconosce valida. Per esempio file con doppio punto, o con caratteri strani quale il simbolo %, o cose strane che windows non digerisce.

Ma come è possibile che questi file vengano scritti su sistemi Windows se Windows non li accetta? Risposta, usando sistemi operativi che non siano Windows, come Mac o Linux che ignorano questi tipi di restrizioni per lo più dovute - immagino - a fattori di retrocompatibilità con sistemi a 16bit come Windows 9x o Windows 3.1 di cui, ancora, Windows 2008 si porta dietro strascichi.

Il problema è risolvibile procedendo ad una cancellazione dei file da prompt dei comandi (diversamente la shell cercherà di cancellare i file nella modalidà standard) anteponendo però al comando del la seguente stringa \\?\ seguita dal path che volete cancellare.

Il comando funziona sia con il del che con il comando rd (per cancellare una directory intera) e per questa scoperta ringrazio gli autori dei vari commenti di questo lungo post sulla gestione dei path in .net.