E' da parecchio tempo che non scrivo un post! Ebbene si, quando si e' sotto rilascio, non si ha tempo per fare nulla. Finalmente siamo arrivati all'RC ed e' giunto il tempo di fare le rifiniture con maggiore tranquillita'.

Un mesetto fa un tester mi scrive un'email dicendo che ha riscontrato un problema sul server durante un test con dei dati volutamente errati. Ogni volta che lui importava creavo un file temporaneo del tipo nome_file_versione. Se il file esisteva gia' non lo cancellavo e ne creavo un'altro appendendo _versione alla fine. Non lo cancellavo perche' cosi' era possibile capire la causa di fallimento post mortem. Peccato che lui faceva un tentativo di import da uno scheduler, il quale girava ogni minuto. Dopo qualche ora mi beccavo un'eccezione di tipo PathTooLongException.

Discutiamo su una possibile soluzione ed alla fine esce la fix. Ma il problema di fondo rimane: perche' non posso gestire i files con fully qualified file name maggiore di 260 caratteri?

Il problema non e' di Windows, ma piuttosto della shell e di .NET. Infatti le API supportano benissimo path di lunghezza fino a 32K con ogni frammento non superiore a 256 caratteri. Chi non li supporta e' la shell di Windows e le API .NET.

In attesa della soluzione, ecco qui qualche post interessanti di Kim (un dev del CLR team ):
http://blogs.msdn.com/bclteam/archive/2007/02/13/long-paths-in-net-part-1-of-3-kim-hamilton.aspx
http://blogs.msdn.com/bclteam/archive/2007/03/26/long-paths-in-net-part-2-of-3-long-path-workarounds-kim-hamilton.aspx

Il mio problema iniziale avrebbe avuto potenzialmente lo stesso problema con 32K nel path (immaginando di far fallire l'import all'infinito) e quindi la fix ci voleva ugualmente. Ma poter superare il limite di 260 craratteri, mi sembrerebbe comunque una cosa da farsi.