const String EXPR_REG_NOM_VARIABLE = "%([^%\\\\?\\*\"/:<>|])*%"; static public Int16 GetDirectoryCompute( ref String cheminAbsolu, String cheminSource ) { // recherche des variables d'environnement dans la chaine de d‚part cheminSource Regex r = new Regex( EXPR_REG_NOM_VARIABLE ); // recherche les occurences de variable d'environnement : mot compris entre des '%' MatchCollection variables = r.Matches( cheminSource ); Int16 retour = retour = SYSTEM_LOCAL; cheminAbsolu = cheminSource; foreach ( Match m in variables ) { string vPourcent = m.ToString( ); string v = vPourcent.Substring( 1, vPourcent.Length - 2 ); String valeur; // pour chaque variable trouv‚e, calculer la correspondance et la remplacer dans la chaine native valeur = Environment.GetEnvironmentVariable( v ); if ( IsCitrix ) { retour = SYSTEM_CITRIX; // selon le cas, il faut voir... if ( v.Equals( USERPROFILE_VAR ) || v.Equals( ALLUSERSPROFILE_VAR ) ) { // variable USERPROFILE ==> transformer la lettre du drive en C: valeur = HOMEDRIVE_C + valeur.Substring( 2 ); } } cheminAbsolu = cheminAbsolu.Replace( vPourcent, valeur ); } return retour; }