2008-11-07 8 views
0

Existe-t-il un moyen de convertir des chemins de dossiers spéciaux en un nom de fichier complet (et inversement) ou dois-je coder le mien (pas difficile je sais, mais pas existe)Comment convertir des dossiers spéciaux en noms de fichiers complets

Je veux stocker le nom de fichier d'un modèle pour une application, que l'utilisateur peut ensuite modifier, il existe dans le dossier LocalApplicationData.

ce que je voudrais stocker est l'emplacement du fichier dans le format suivant:

% LOCALAPPDATA% \ MyApp \ Templates \ Rapport template.xls

pour que ce fichier d'application peut être utilisé par de nombreux utilisateurs, chaque utilisateur à l'ouverture obtiendra le modèle de rapport à partir de son propre répertoire d'application locale.

Je peux écrire

replace("%LOCALAPPDATA%", _ 
    System.Environment.GetFolderPath(
     System.Environment.SpecialFolder.LocalApplicationData)) 

and vice versa 

quand je viens d'enregistrer l'emplacement du fichier, est pourtant là un System.IO (ou similaire) appeler à faire pour moi, plutôt que d'avoir à passer par tous les possibles spécial dossier?

Répondre

4

Regardez: Environment.ExpandEnvironmentVariables

Après quelques regardant autour, je ne pense pas qu'il y ait un moyen intégré disponible pour le reconvertir, cependant.

Vous pouvez le faire si:

static void Main(string[] args) 
{ 
    var values = Enum.GetValues(typeof(Environment.SpecialFolder)); 

    foreach (Environment.SpecialFolder value in values) 
     Console.WriteLine(value + " : " + Environment.GetFolderPath(value)); 

    Console.ReadKey(); 
} 
+0

ah ... Je ne devrais vraiment pas être sur SO sans une tasse de café le matin. –

+0

Merci, j'ai essayé ceci en premier, cependant, alors que cela fonctionne avec Visa, puisque des éléments comme% LOCALAPPDATA% sont définis, cela ne fonctionne pas avec XP où ces dossiers spéciaux ne sont pas définis comme variables d'environnement! – GalleySlave

+0

Je pense que c'est un autre problème entièrement. – chakrit

0

La façon normale de Windows pour identifier les « dossiers spéciaux » est par leur CSIDL. Environment.SpecialFolder est juste une petite enveloppe autour d'elle. Comme vous l'avez noté, dans un commentaire à la publication de chakrit, la plupart des CSIDL n'ont tout simplement pas de variables d'environnement correspondantes. C'est une raison probable pour laquelle il n'y a pas de fonction pour trouver la variable d'environnement pour les quelques CSIDL qui le font.

Questions connexes