CreateDirectory e Windows 2003

Ci sono delle cose che a volte proprio non capisco e che mi fanno imbufalire. Ho pubblicato un lavoro abbastanza semplice realizzato in .net 1.1 su un server web (tra quelli che vanno per la maggiore). Ma quando vado a provare l'applicazione mi trovo di fronte ad un bel errore nel create directory.
Lo stack mi diceva che non avevo l'autorizzazione necessaria per la creazione della cartella; vado a controllare nel mio pannello di controllo ed era tutto ok; provo a resettare i permessi, ma niente. Preso dalla disperazione chiamo il provider chiedo un controllo, ma niente da fare l'errore persiste.
Poi, cerca cerca su google trovo questo articolo che mi risolve il problema, tranne per il fatto che se cerco di creare la cartella C:\Disney\Pluto e la cartella Disney non esiste lui va in errore.

Il problema è facilmente risolvibile con questo codice:

[DllImport("msvcrt.dll", SetLastError = true)] 
     
static extern int _mkdir(string path); 
  
static DirectoryInfo CreateDirectory(string path) 
     
{ 
    int returnCode = _mkdir(path); 
    
    if (returnCode == -1)       
    { 
        string[] percorsi = path.Split(new Char[] {'\\'} ); 
    
        if(percorsi.Length > 1)         
        { 
            if(Directory.Exists(percorsi[0]))  
            { 
                string percorso = percorsi[0] + "\\"; 
 

                for (int i = 1; i < percorsi.Length; i++) 
                { 
                    percorso += percorsi[i] + "\\"; 
               
                    if (!Directory.Exists(percorsi[i])) 
                         _mkdir(percorso); 
                } 
            } 
            else 
                throw new ApplicationException("Drive not found."); 
           
        } 
        else  
            throw new ApplicationException("String format error!"); 
       
    } 
       
    else if (returnCode != 0) 
         
    throw new ApplicationException("Error calling [msvcrt.dll]:_wmkdir(" + path + "), error code: " + returnCode.ToString()); 

    return new DirectoryInfo(path); 
     
} 

La sintassi per la creazione della cartella rimane la stessa, ma viene intercettata la funzione CreateDirecotry e sostituita con la nostra.
Un unica precisazione, all'interno del ciclo for utilizzo l'_mkdir per la creazione della cartella e non la mia funzione; faccio ciò per evitare la ricorsione.


Comments